diff --git a/.git_backup/COMMIT_EDITMSG b/.git_backup/COMMIT_EDITMSG new file mode 100644 index 0000000..40c93ea --- /dev/null +++ b/.git_backup/COMMIT_EDITMSG @@ -0,0 +1 @@ +fix: resolve satellite NORAD ID lookup to fix propagation loop diff --git a/.git_backup/FETCH_HEAD b/.git_backup/FETCH_HEAD new file mode 100644 index 0000000..9ccf0ac --- /dev/null +++ b/.git_backup/FETCH_HEAD @@ -0,0 +1 @@ +313aa32a9b08c1ddce4e9c801bdda210e136d67f branch 'main' of https://github.com/BigBodyCobain/Shadowbroker diff --git a/.git_backup/HEAD b/.git_backup/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/.git_backup/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/.git_backup/ORIG_HEAD b/.git_backup/ORIG_HEAD new file mode 100644 index 0000000..2cb741a --- /dev/null +++ b/.git_backup/ORIG_HEAD @@ -0,0 +1 @@ +e1f4ac2cfb114de61c0d83234b8d2deb545b2301 diff --git a/.git_backup/config b/.git_backup/config new file mode 100644 index 0000000..6acb197 --- /dev/null +++ b/.git_backup/config @@ -0,0 +1,13 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = https://BigBodyCobain@github.com/BigBodyCobain/Shadowbroker.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "main"] + remote = origin + merge = refs/heads/main diff --git a/.git_backup/description b/.git_backup/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/.git_backup/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/.git_backup/gk/config b/.git_backup/gk/config new file mode 100644 index 0000000..1fbde9d --- /dev/null +++ b/.git_backup/gk/config @@ -0,0 +1,3 @@ +[branch "main"] + gk-last-accessed = 2026-03-08T21:04:31.109Z + gk-last-modified = 2026-03-08T21:04:31.109Z diff --git a/.git_backup/hooks/applypatch-msg.sample b/.git_backup/hooks/applypatch-msg.sample new file mode 100644 index 0000000..a5d7b84 --- /dev/null +++ b/.git_backup/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/.git_backup/hooks/commit-msg.sample b/.git_backup/hooks/commit-msg.sample new file mode 100644 index 0000000..b58d118 --- /dev/null +++ b/.git_backup/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/.git_backup/hooks/fsmonitor-watchman.sample b/.git_backup/hooks/fsmonitor-watchman.sample new file mode 100644 index 0000000..23e856f --- /dev/null +++ b/.git_backup/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/.git_backup/hooks/post-update.sample b/.git_backup/hooks/post-update.sample new file mode 100644 index 0000000..ec17ec1 --- /dev/null +++ b/.git_backup/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/.git_backup/hooks/pre-applypatch.sample b/.git_backup/hooks/pre-applypatch.sample new file mode 100644 index 0000000..4142082 --- /dev/null +++ b/.git_backup/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/.git_backup/hooks/pre-commit.sample b/.git_backup/hooks/pre-commit.sample new file mode 100644 index 0000000..29ed5ee --- /dev/null +++ b/.git_backup/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/.git_backup/hooks/pre-merge-commit.sample b/.git_backup/hooks/pre-merge-commit.sample new file mode 100644 index 0000000..399eab1 --- /dev/null +++ b/.git_backup/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/.git_backup/hooks/pre-push.sample b/.git_backup/hooks/pre-push.sample new file mode 100644 index 0000000..4ce688d --- /dev/null +++ b/.git_backup/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/.git_backup/hooks/pre-rebase.sample b/.git_backup/hooks/pre-rebase.sample new file mode 100644 index 0000000..6cbef5c --- /dev/null +++ b/.git_backup/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/.git_backup/hooks/pre-receive.sample b/.git_backup/hooks/pre-receive.sample new file mode 100644 index 0000000..a1fd29e --- /dev/null +++ b/.git_backup/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/.git_backup/hooks/prepare-commit-msg.sample b/.git_backup/hooks/prepare-commit-msg.sample new file mode 100644 index 0000000..10fa14c --- /dev/null +++ b/.git_backup/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/.git_backup/hooks/push-to-checkout.sample b/.git_backup/hooks/push-to-checkout.sample new file mode 100644 index 0000000..af5a0c0 --- /dev/null +++ b/.git_backup/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/.git_backup/hooks/update.sample b/.git_backup/hooks/update.sample new file mode 100644 index 0000000..c4d426b --- /dev/null +++ b/.git_backup/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/.git_backup/index b/.git_backup/index new file mode 100644 index 0000000..6d27d0f Binary files /dev/null and b/.git_backup/index differ diff --git a/.git_backup/info/exclude b/.git_backup/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/.git_backup/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/.git_backup/logs/HEAD b/.git_backup/logs/HEAD new file mode 100644 index 0000000..9f093bf --- /dev/null +++ b/.git_backup/logs/HEAD @@ -0,0 +1,14 @@ +0000000000000000000000000000000000000000 8ed321f2bac0323dabc313a100504ca0a6e9af66 anoracleofra-code 1772689448 -0700 commit (initial): Initial commit: ShadowBroker v0.1 +8ed321f2bac0323dabc313a100504ca0a6e9af66 0000000000000000000000000000000000000000 anoracleofra-code 1772689448 -0700 Branch: renamed refs/heads/master to refs/heads/main +0000000000000000000000000000000000000000 8ed321f2bac0323dabc313a100504ca0a6e9af66 anoracleofra-code 1772689448 -0700 Branch: renamed refs/heads/master to refs/heads/main +8ed321f2bac0323dabc313a100504ca0a6e9af66 3888c91ab35178f779c7fa29f3cb1d33c65116c4 anoracleofra-code 1772691134 -0700 commit: feat: add cross-platform start.sh script and update package.json for macOS/Linux +3888c91ab35178f779c7fa29f3cb1d33c65116c4 e1f4ac2cfb114de61c0d83234b8d2deb545b2301 anoracleofra-code 1773000243 -0600 commit: feat: add Docker publishing via GitHub Actions +e1f4ac2cfb114de61c0d83234b8d2deb545b2301 e1f4ac2cfb114de61c0d83234b8d2deb545b2301 anoracleofra-code 1773000289 -0600 reset: moving to HEAD +e1f4ac2cfb114de61c0d83234b8d2deb545b2301 313aa32a9b08c1ddce4e9c801bdda210e136d67f anoracleofra-code 1773000292 -0600 pull --rebase origin main (start): checkout 313aa32a9b08c1ddce4e9c801bdda210e136d67f +313aa32a9b08c1ddce4e9c801bdda210e136d67f 36c92881c85d3de23f1bb1cbb19d961a3fe2153e anoracleofra-code 1773000292 -0600 pull --rebase origin main (pick): feat: add Docker publishing via GitHub Actions +36c92881c85d3de23f1bb1cbb19d961a3fe2153e 36c92881c85d3de23f1bb1cbb19d961a3fe2153e anoracleofra-code 1773000292 -0600 pull --rebase origin main (finish): returning to refs/heads/main +36c92881c85d3de23f1bb1cbb19d961a3fe2153e 9802fe55a36a903ee68631f48a65d3a2ed180414 anoracleofra-code 1773001228 -0600 commit: fix: make dev scripts cross-platform compatible +9802fe55a36a903ee68631f48a65d3a2ed180414 b57830c1a6b44c36ce83a5acba2bca7b403a2e92 anoracleofra-code 1773001476 -0600 commit: fix: make test_trace.py curl commands OS-agnostic +b57830c1a6b44c36ce83a5acba2bca7b403a2e92 15f1a1dc3ccce735bbeecf4589d935e56254f018 anoracleofra-code 1773001674 -0600 commit: bump: release v0.2.0 +15f1a1dc3ccce735bbeecf4589d935e56254f018 7976602b67bd7bebb98837fcefa21a07ed2de01d anoracleofra-code 1773003311 -0600 commit: fix: integrate AI cross-platform start scripts +7976602b67bd7bebb98837fcefa21a07ed2de01d 5926084a17082014b2ce2aa7ffdcb8367c79975b anoracleofra-code 1773003718 -0600 commit: fix: resolve satellite NORAD ID lookup to fix propagation loop diff --git a/.git_backup/logs/refs/heads/main b/.git_backup/logs/refs/heads/main new file mode 100644 index 0000000..2f51db1 --- /dev/null +++ b/.git_backup/logs/refs/heads/main @@ -0,0 +1,10 @@ +0000000000000000000000000000000000000000 8ed321f2bac0323dabc313a100504ca0a6e9af66 anoracleofra-code 1772689448 -0700 commit (initial): Initial commit: ShadowBroker v0.1 +8ed321f2bac0323dabc313a100504ca0a6e9af66 8ed321f2bac0323dabc313a100504ca0a6e9af66 anoracleofra-code 1772689448 -0700 Branch: renamed refs/heads/master to refs/heads/main +8ed321f2bac0323dabc313a100504ca0a6e9af66 3888c91ab35178f779c7fa29f3cb1d33c65116c4 anoracleofra-code 1772691134 -0700 commit: feat: add cross-platform start.sh script and update package.json for macOS/Linux +3888c91ab35178f779c7fa29f3cb1d33c65116c4 e1f4ac2cfb114de61c0d83234b8d2deb545b2301 anoracleofra-code 1773000243 -0600 commit: feat: add Docker publishing via GitHub Actions +e1f4ac2cfb114de61c0d83234b8d2deb545b2301 36c92881c85d3de23f1bb1cbb19d961a3fe2153e anoracleofra-code 1773000292 -0600 pull --rebase origin main (finish): refs/heads/main onto 313aa32a9b08c1ddce4e9c801bdda210e136d67f +36c92881c85d3de23f1bb1cbb19d961a3fe2153e 9802fe55a36a903ee68631f48a65d3a2ed180414 anoracleofra-code 1773001228 -0600 commit: fix: make dev scripts cross-platform compatible +9802fe55a36a903ee68631f48a65d3a2ed180414 b57830c1a6b44c36ce83a5acba2bca7b403a2e92 anoracleofra-code 1773001476 -0600 commit: fix: make test_trace.py curl commands OS-agnostic +b57830c1a6b44c36ce83a5acba2bca7b403a2e92 15f1a1dc3ccce735bbeecf4589d935e56254f018 anoracleofra-code 1773001674 -0600 commit: bump: release v0.2.0 +15f1a1dc3ccce735bbeecf4589d935e56254f018 7976602b67bd7bebb98837fcefa21a07ed2de01d anoracleofra-code 1773003311 -0600 commit: fix: integrate AI cross-platform start scripts +7976602b67bd7bebb98837fcefa21a07ed2de01d 5926084a17082014b2ce2aa7ffdcb8367c79975b anoracleofra-code 1773003718 -0600 commit: fix: resolve satellite NORAD ID lookup to fix propagation loop diff --git a/.git_backup/logs/refs/remotes/origin/main b/.git_backup/logs/refs/remotes/origin/main new file mode 100644 index 0000000..0fce16c --- /dev/null +++ b/.git_backup/logs/refs/remotes/origin/main @@ -0,0 +1,9 @@ +0000000000000000000000000000000000000000 8ed321f2bac0323dabc313a100504ca0a6e9af66 anoracleofra-code 1772690425 -0700 update by push +8ed321f2bac0323dabc313a100504ca0a6e9af66 3888c91ab35178f779c7fa29f3cb1d33c65116c4 anoracleofra-code 1772691136 -0700 update by push +3888c91ab35178f779c7fa29f3cb1d33c65116c4 313aa32a9b08c1ddce4e9c801bdda210e136d67f anoracleofra-code 1773000292 -0600 pull --rebase origin main: fast-forward +313aa32a9b08c1ddce4e9c801bdda210e136d67f 36c92881c85d3de23f1bb1cbb19d961a3fe2153e anoracleofra-code 1773000299 -0600 update by push +36c92881c85d3de23f1bb1cbb19d961a3fe2153e 9802fe55a36a903ee68631f48a65d3a2ed180414 anoracleofra-code 1773001230 -0600 update by push +9802fe55a36a903ee68631f48a65d3a2ed180414 b57830c1a6b44c36ce83a5acba2bca7b403a2e92 anoracleofra-code 1773001477 -0600 update by push +b57830c1a6b44c36ce83a5acba2bca7b403a2e92 15f1a1dc3ccce735bbeecf4589d935e56254f018 anoracleofra-code 1773001675 -0600 update by push +15f1a1dc3ccce735bbeecf4589d935e56254f018 7976602b67bd7bebb98837fcefa21a07ed2de01d anoracleofra-code 1773003313 -0600 update by push +7976602b67bd7bebb98837fcefa21a07ed2de01d 5926084a17082014b2ce2aa7ffdcb8367c79975b anoracleofra-code 1773003720 -0600 update by push diff --git a/.git_backup/objects/00/0c7b3641eea0aa051e1864add55d83992a5357 b/.git_backup/objects/00/0c7b3641eea0aa051e1864add55d83992a5357 new file mode 100644 index 0000000..ae099ff Binary files /dev/null and b/.git_backup/objects/00/0c7b3641eea0aa051e1864add55d83992a5357 differ diff --git a/.git_backup/objects/00/4145cddf3f9db91b57b9cb596683c8eb420862 b/.git_backup/objects/00/4145cddf3f9db91b57b9cb596683c8eb420862 new file mode 100644 index 0000000..b03377b --- /dev/null +++ b/.git_backup/objects/00/4145cddf3f9db91b57b9cb596683c8eb420862 @@ -0,0 +1,2 @@ +x]Pn0짬ܳyT)=qW!!/%D|}iUxvs#^vww21C#]}|dB +xpD;[,˂v R* "M)%h bH5 >b:J@y^S!/&_;Kr2.'ma͏}I*SJ#i4 صHl+1ҎPӕ]{icnD?[op{h]'yL4IDE;_d \ No newline at end of file diff --git a/.git_backup/objects/00/5d550868a94b04b9b99f5b9dbf5f0ef2902038 b/.git_backup/objects/00/5d550868a94b04b9b99f5b9dbf5f0ef2902038 new file mode 100644 index 0000000..3e84ae5 Binary files /dev/null and b/.git_backup/objects/00/5d550868a94b04b9b99f5b9dbf5f0ef2902038 differ diff --git a/.git_backup/objects/00/a1ecd6c2500823b306477925cdda88895339ed b/.git_backup/objects/00/a1ecd6c2500823b306477925cdda88895339ed new file mode 100644 index 0000000..d9b8333 Binary files /dev/null and b/.git_backup/objects/00/a1ecd6c2500823b306477925cdda88895339ed differ diff --git a/.git_backup/objects/01/e847a3662443a077457309508e69d298187dd5 b/.git_backup/objects/01/e847a3662443a077457309508e69d298187dd5 new file mode 100644 index 0000000..f39a8b7 Binary files /dev/null and b/.git_backup/objects/01/e847a3662443a077457309508e69d298187dd5 differ diff --git a/.git_backup/objects/03/1f4cd009c88f1884f89e09701c54250db9f7dd b/.git_backup/objects/03/1f4cd009c88f1884f89e09701c54250db9f7dd new file mode 100644 index 0000000..fa7ff9e Binary files /dev/null and b/.git_backup/objects/03/1f4cd009c88f1884f89e09701c54250db9f7dd differ diff --git a/.git_backup/objects/04/e7f9f09ac5148e78f35a6944019956da91a8a3 b/.git_backup/objects/04/e7f9f09ac5148e78f35a6944019956da91a8a3 new file mode 100644 index 0000000..5c219fd --- /dev/null +++ b/.git_backup/objects/04/e7f9f09ac5148e78f35a6944019956da91a8a3 @@ -0,0 +1,2 @@ +x+)JMU01c040031QHON--(M,Ыa3|ʄlYaM + \ No newline at end of file diff --git a/.git_backup/objects/05/e726d1b4201bc8c7716d2b058279676582e8c0 b/.git_backup/objects/05/e726d1b4201bc8c7716d2b058279676582e8c0 new file mode 100644 index 0000000..5a91548 Binary files /dev/null and b/.git_backup/objects/05/e726d1b4201bc8c7716d2b058279676582e8c0 differ diff --git a/.git_backup/objects/06/24188f733e50f473fcc76fa240603908d17b34 b/.git_backup/objects/06/24188f733e50f473fcc76fa240603908d17b34 new file mode 100644 index 0000000..19601a1 --- /dev/null +++ b/.git_backup/objects/06/24188f733e50f473fcc76fa240603908d17b34 @@ -0,0 +1,2 @@ +x5K0 EQYʧ {qST!PwORU=_GP4DxЃ6|`y))eN3]9(b+u}`DcRTRV[T֥B>, Buǎ76|ˀ/T5ڬP)E+bSD0ae-*G=i7"kܪ˫_.gg ŘaR?B[ rs\BCi{5Jv& MI$3L مTsTɭđ|.Ȝt2( =S9ɞ!Нo nN.JZx~t1uMdVUd*,hEZkhFzi! \ No newline at end of file diff --git a/.git_backup/objects/0a/0e8c8841c45541a696194004d79b48cb9e30b2 b/.git_backup/objects/0a/0e8c8841c45541a696194004d79b48cb9e30b2 new file mode 100644 index 0000000..5af38c8 Binary files /dev/null and b/.git_backup/objects/0a/0e8c8841c45541a696194004d79b48cb9e30b2 differ diff --git a/.git_backup/objects/0b/54a9eb5b9ddcc67495af3a0ba54a0fe28c5ec3 b/.git_backup/objects/0b/54a9eb5b9ddcc67495af3a0ba54a0fe28c5ec3 new file mode 100644 index 0000000..5170f7d --- /dev/null +++ b/.git_backup/objects/0b/54a9eb5b9ddcc67495af3a0ba54a0fe28c5ec3 @@ -0,0 +1,3 @@ +xePN0X'R T*Q8΢X$^co{юatz,5dgw$1yXpV6jСjA+x- (O+ҒJ(+A1'w@*<'_$=*FP`JOI> Bp +-Hٙ +&i:_}x Y\.u L5^Fm]b( 8,M^fpiJVa?lV}gG/F2vyR84|Eч \ No newline at end of file diff --git a/.git_backup/objects/0d/bbcdfd9d4770c10324f4367a23d21fc8a56df8 b/.git_backup/objects/0d/bbcdfd9d4770c10324f4367a23d21fc8a56df8 new file mode 100644 index 0000000..136b207 --- /dev/null +++ b/.git_backup/objects/0d/bbcdfd9d4770c10324f4367a23d21fc8a56df8 @@ -0,0 +1,4 @@ +xTkO0C@ljڂ4i@ mBnbe}iӖA7}{g$6߬FBF̦SpeO8u0!>a'] {Me,>Bw:f/K]A7:ѵ %V,c*A34vJxRR g+8 NVX( uLJDK,oDXOmRF\6I; .C{jbvz xhkEש)">OsR//uuQnN} 9=w+&!XWſfɍDNA|w0lr7sFs n+V&w ,vdgkѼEۂ+sAgD{}Ի~/2e<.=KjO,V+++~M)nO'%ifq FN /PO~enG 145~=%%p솶wm,ɥ5)s \ No newline at end of file diff --git a/.git_backup/objects/12/260dec60876b7b074c4a9c5a23a7a8e88ec781 b/.git_backup/objects/12/260dec60876b7b074c4a9c5a23a7a8e88ec781 new file mode 100644 index 0000000..27f4e02 Binary files /dev/null and b/.git_backup/objects/12/260dec60876b7b074c4a9c5a23a7a8e88ec781 differ diff --git a/.git_backup/objects/12/d0835a0d871fde9f68f23cdb98812e68dd9c87 b/.git_backup/objects/12/d0835a0d871fde9f68f23cdb98812e68dd9c87 new file mode 100644 index 0000000..b499cec Binary files /dev/null and b/.git_backup/objects/12/d0835a0d871fde9f68f23cdb98812e68dd9c87 differ diff --git a/.git_backup/objects/13/e9a744bdf5084cdf9d4c287919a54a992d2b9e b/.git_backup/objects/13/e9a744bdf5084cdf9d4c287919a54a992d2b9e new file mode 100644 index 0000000..621e1da Binary files /dev/null and b/.git_backup/objects/13/e9a744bdf5084cdf9d4c287919a54a992d2b9e differ diff --git a/.git_backup/objects/15/0fd9eca806699b6d42ce4a362309f3e8af3376 b/.git_backup/objects/15/0fd9eca806699b6d42ce4a362309f3e8af3376 new file mode 100644 index 0000000..0fc521c Binary files /dev/null and b/.git_backup/objects/15/0fd9eca806699b6d42ce4a362309f3e8af3376 differ diff --git a/.git_backup/objects/15/f1a1dc3ccce735bbeecf4589d935e56254f018 b/.git_backup/objects/15/f1a1dc3ccce735bbeecf4589d935e56254f018 new file mode 100644 index 0000000..51f21c6 --- /dev/null +++ b/.git_backup/objects/15/f1a1dc3ccce735bbeecf4589d935e56254f018 @@ -0,0 +1,2 @@ +x10 @QriB\q]@j +[?Ѯ73'\d*32y ^-'L+,+Qdfy39%VI&,>[N^ZȽ6du18R Z  q`}_Wyf4xtyQ \ No newline at end of file diff --git a/.git_backup/objects/17/bd77c3ce5c05362862da00d24b518757613a79 b/.git_backup/objects/17/bd77c3ce5c05362862da00d24b518757613a79 new file mode 100644 index 0000000..ad21cb9 --- /dev/null +++ b/.git_backup/objects/17/bd77c3ce5c05362862da00d24b518757613a79 @@ -0,0 +1,2 @@ +x=NMK0_1)hzؓ]Vch)FLM*tǼf4fsD!yx]rUAO= P #֥ZΣ4CVb,ɵV. s*"3%q$~EݩzRp{I"ٌbi:ͥiFڌ~ ^s^Z]W{4!p1Bhnj=䢲Ѝ1S{׍sq&5r2 +F3&0"e6jօt_-)x4VW"_w=55s=o;ђ [v=(gwolRt&|(d*v \ No newline at end of file diff --git a/.git_backup/objects/19/9c8084a456a073d59ed94010c3f75c33c16c34 b/.git_backup/objects/19/9c8084a456a073d59ed94010c3f75c33c16c34 new file mode 100644 index 0000000..5eb72ed Binary files /dev/null and b/.git_backup/objects/19/9c8084a456a073d59ed94010c3f75c33c16c34 differ diff --git a/.git_backup/objects/1a/bc54e1f9e4d27c5b7a784ccc7cd86ca16db854 b/.git_backup/objects/1a/bc54e1f9e4d27c5b7a784ccc7cd86ca16db854 new file mode 100644 index 0000000..cb99ebd Binary files /dev/null and b/.git_backup/objects/1a/bc54e1f9e4d27c5b7a784ccc7cd86ca16db854 differ diff --git a/.git_backup/objects/1b/ce9433355ec25dd09d566a5a7c82fc4ccf8fe9 b/.git_backup/objects/1b/ce9433355ec25dd09d566a5a7c82fc4ccf8fe9 new file mode 100644 index 0000000..2ba8c57 Binary files /dev/null and b/.git_backup/objects/1b/ce9433355ec25dd09d566a5a7c82fc4ccf8fe9 differ diff --git a/.git_backup/objects/1c/9b7b69d705d0540593a971a0c45d2b71cf4379 b/.git_backup/objects/1c/9b7b69d705d0540593a971a0c45d2b71cf4379 new file mode 100644 index 0000000..2be0a48 --- /dev/null +++ b/.git_backup/objects/1c/9b7b69d705d0540593a971a0c45d2b71cf4379 @@ -0,0 +1,3 @@ +xm]O0Wx-*!ĘR +v?w۳@ڵ󜍔|)ExvFת*%Gu+^aU28!m]6v?M!tEP3f`l(&BP +l' e -315>GDi.څciFkA 5T8",꣢ 8R?zCO. v`Vj'MOOwn[<{U,/<HCYyG6z hKzۻZP)BB3 q ҇mŤ{(%mdv?+b:g3tjTTZ\)-h`D9es?k \ No newline at end of file diff --git a/.git_backup/objects/1e/0e6224abbf09c1fd34c008a56d78efef579506 b/.git_backup/objects/1e/0e6224abbf09c1fd34c008a56d78efef579506 new file mode 100644 index 0000000..b93482a Binary files /dev/null and b/.git_backup/objects/1e/0e6224abbf09c1fd34c008a56d78efef579506 differ diff --git a/.git_backup/objects/1f/0292bf696045012b3e24496edf2f87b73345ef b/.git_backup/objects/1f/0292bf696045012b3e24496edf2f87b73345ef new file mode 100644 index 0000000..cabdbf5 Binary files /dev/null and b/.git_backup/objects/1f/0292bf696045012b3e24496edf2f87b73345ef differ diff --git a/.git_backup/objects/1f/21942e66289052ece907f30ab629777e94382a b/.git_backup/objects/1f/21942e66289052ece907f30ab629777e94382a new file mode 100644 index 0000000..962432a Binary files /dev/null and b/.git_backup/objects/1f/21942e66289052ece907f30ab629777e94382a differ diff --git a/.git_backup/objects/1f/c6982631e7cc5c3d60ea0d5199524bb80682aa b/.git_backup/objects/1f/c6982631e7cc5c3d60ea0d5199524bb80682aa new file mode 100644 index 0000000..0189bf3 Binary files /dev/null and b/.git_backup/objects/1f/c6982631e7cc5c3d60ea0d5199524bb80682aa differ diff --git a/.git_backup/objects/21/37046acaa8ebd01c7a0f03b69d519277b43a91 b/.git_backup/objects/21/37046acaa8ebd01c7a0f03b69d519277b43a91 new file mode 100644 index 0000000..f36abed Binary files /dev/null and b/.git_backup/objects/21/37046acaa8ebd01c7a0f03b69d519277b43a91 differ diff --git a/.git_backup/objects/21/d9bed2477c6f71e758c696b5e5df6b7b678680 b/.git_backup/objects/21/d9bed2477c6f71e758c696b5e5df6b7b678680 new file mode 100644 index 0000000..5ccf251 Binary files /dev/null and b/.git_backup/objects/21/d9bed2477c6f71e758c696b5e5df6b7b678680 differ diff --git a/.git_backup/objects/23/05c1df8815315d0aaa7a98195972effdb1fe96 b/.git_backup/objects/23/05c1df8815315d0aaa7a98195972effdb1fe96 new file mode 100644 index 0000000..ccaec1d Binary files /dev/null and b/.git_backup/objects/23/05c1df8815315d0aaa7a98195972effdb1fe96 differ diff --git a/.git_backup/objects/23/b7bd3dc49b0779fa09ecb1779220c4a3626bf7 b/.git_backup/objects/23/b7bd3dc49b0779fa09ecb1779220c4a3626bf7 new file mode 100644 index 0000000..ea76d2e Binary files /dev/null and b/.git_backup/objects/23/b7bd3dc49b0779fa09ecb1779220c4a3626bf7 differ diff --git a/.git_backup/objects/23/cf0cd2b92bce28c73af6793df233b52c5dea55 b/.git_backup/objects/23/cf0cd2b92bce28c73af6793df233b52c5dea55 new file mode 100644 index 0000000..1dd3b12 Binary files /dev/null and b/.git_backup/objects/23/cf0cd2b92bce28c73af6793df233b52c5dea55 differ diff --git a/.git_backup/objects/24/ea56aba9840f1eef220ffa99e736b9e1d3595e b/.git_backup/objects/24/ea56aba9840f1eef220ffa99e736b9e1d3595e new file mode 100644 index 0000000..90db345 Binary files /dev/null and b/.git_backup/objects/24/ea56aba9840f1eef220ffa99e736b9e1d3595e differ diff --git a/.git_backup/objects/26/84942ccc6886d499be86d165d9970e94c20ba2 b/.git_backup/objects/26/84942ccc6886d499be86d165d9970e94c20ba2 new file mode 100644 index 0000000..c830520 --- /dev/null +++ b/.git_backup/objects/26/84942ccc6886d499be86d165d9970e94c20ba2 @@ -0,0 +1,2 @@ +xTn0w,Ch5i5 !`iELhܮflۤ yf(hPM)axRIfM"'>8^9Cl'o)R> y;~89cc|rc )K Uϐ4MuS q%h{ftCjRT$W$u+]#L0M5wcOո-|.=Xބ'F/ 嵿F#Ҷ֒A5-pg<<ƈu ]IQ^ k_;14"\tӒhΠB-Tt%k;Hf%d@v݇Kwb\^_I/cG#p$ ֎MK' +FPœ6t:ʭKETxH9ZySs= Kki)I͢xtS,EݼfKSԊ lBfӫ?vGd2oot-+38J!#Jd!B9BMõ~}|jg0% %ZQSr2:9?+t6&xAޔ3Ư.ػJ,Q]fc߈.\Ώ.O`"vwC[YO+к"ZwO\n\0~ZoL \ No newline at end of file diff --git a/.git_backup/objects/2a/8a913698e7be519d1dfd6a55de6462aee4a993 b/.git_backup/objects/2a/8a913698e7be519d1dfd6a55de6462aee4a993 new file mode 100644 index 0000000..050a8a9 Binary files /dev/null and b/.git_backup/objects/2a/8a913698e7be519d1dfd6a55de6462aee4a993 differ diff --git a/.git_backup/objects/2a/983fefcd9103de7a812a1e9d546e1c68939e17 b/.git_backup/objects/2a/983fefcd9103de7a812a1e9d546e1c68939e17 new file mode 100644 index 0000000..160bb25 Binary files /dev/null and b/.git_backup/objects/2a/983fefcd9103de7a812a1e9d546e1c68939e17 differ diff --git a/.git_backup/objects/2b/19e1d681ba6d10afec1eebdc51c5d28ade4a0b b/.git_backup/objects/2b/19e1d681ba6d10afec1eebdc51c5d28ade4a0b new file mode 100644 index 0000000..e9c0d68 --- /dev/null +++ b/.git_backup/objects/2b/19e1d681ba6d10afec1eebdc51c5d28ade4a0b @@ -0,0 +1,3 @@ +xn0sSlV( +FCA`Sm+*N`KJYu\og)=;|! XwOzmWgBPTiߗtڄg͑ؿ_cI +w[W=&ŭOĜ}gabjtu2'?^Q2)8.^B/2*h?Bd.y )>=ZsGwp޳=T T>Gaແ R_؏пjޅuzgāعH-_E:dLJJ;~??2Cz1Pءݾ~V570lѲ'=ulѮ._㿘E[AjR.m/N'n7W#lJ]pˆhzݯbf $vR|xQv7?[ \ No newline at end of file diff --git a/.git_backup/objects/37/d47b3b5706624e48875bf56e96be90369859cf b/.git_backup/objects/37/d47b3b5706624e48875bf56e96be90369859cf new file mode 100644 index 0000000..4d7fd3a Binary files /dev/null and b/.git_backup/objects/37/d47b3b5706624e48875bf56e96be90369859cf differ diff --git a/.git_backup/objects/38/88c91ab35178f779c7fa29f3cb1d33c65116c4 b/.git_backup/objects/38/88c91ab35178f779c7fa29f3cb1d33c65116c4 new file mode 100644 index 0000000..8c5b531 Binary files /dev/null and b/.git_backup/objects/38/88c91ab35178f779c7fa29f3cb1d33c65116c4 differ diff --git a/.git_backup/objects/3c/da542952d7268e03f72a5bc0745ce17f714f01 b/.git_backup/objects/3c/da542952d7268e03f72a5bc0745ce17f714f01 new file mode 100644 index 0000000..64cad4d Binary files /dev/null and b/.git_backup/objects/3c/da542952d7268e03f72a5bc0745ce17f714f01 differ diff --git a/.git_backup/objects/3e/b29e9fe30ec9e6f197d4aa12bc7295418310a4 b/.git_backup/objects/3e/b29e9fe30ec9e6f197d4aa12bc7295418310a4 new file mode 100644 index 0000000..8305fee Binary files /dev/null and b/.git_backup/objects/3e/b29e9fe30ec9e6f197d4aa12bc7295418310a4 differ diff --git a/.git_backup/objects/44/14d1d5b6acd54d55e3c22181d72d92f908e333 b/.git_backup/objects/44/14d1d5b6acd54d55e3c22181d72d92f908e333 new file mode 100644 index 0000000..a7445f7 Binary files /dev/null and b/.git_backup/objects/44/14d1d5b6acd54d55e3c22181d72d92f908e333 differ diff --git a/.git_backup/objects/47/23dc94a9dfddbf665bed15f153f82e7da007aa.REMOVED.git-id b/.git_backup/objects/47/23dc94a9dfddbf665bed15f153f82e7da007aa.REMOVED.git-id new file mode 100644 index 0000000..5af5cd0 --- /dev/null +++ b/.git_backup/objects/47/23dc94a9dfddbf665bed15f153f82e7da007aa.REMOVED.git-id @@ -0,0 +1 @@ +b7bd34fbfe4a8a1243afc0989eeac35181208642 \ No newline at end of file diff --git a/.git_backup/objects/4a/4f3e0a71bbc374aa09fbed9c41a386b1bad7fa b/.git_backup/objects/4a/4f3e0a71bbc374aa09fbed9c41a386b1bad7fa new file mode 100644 index 0000000..d302b69 Binary files /dev/null and b/.git_backup/objects/4a/4f3e0a71bbc374aa09fbed9c41a386b1bad7fa differ diff --git a/.git_backup/objects/4a/fae2283a2d01044e6095543ad0f98d450fc2f0 b/.git_backup/objects/4a/fae2283a2d01044e6095543ad0f98d450fc2f0 new file mode 100644 index 0000000..8ca08f0 Binary files /dev/null and b/.git_backup/objects/4a/fae2283a2d01044e6095543ad0f98d450fc2f0 differ diff --git a/.git_backup/objects/4d/986dff7b59b1ef714bd313f08c2c64c61f7d89 b/.git_backup/objects/4d/986dff7b59b1ef714bd313f08c2c64c61f7d89 new file mode 100644 index 0000000..4ad7b9e Binary files /dev/null and b/.git_backup/objects/4d/986dff7b59b1ef714bd313f08c2c64c61f7d89 differ diff --git a/.git_backup/objects/51/74b28c565c285e3e312ec5178be64fbeca8398 b/.git_backup/objects/51/74b28c565c285e3e312ec5178be64fbeca8398 new file mode 100644 index 0000000..3c78a48 Binary files /dev/null and b/.git_backup/objects/51/74b28c565c285e3e312ec5178be64fbeca8398 differ diff --git a/.git_backup/objects/52/82c0ebc9b635cca29fe35f4eb4f4b48bef7432 b/.git_backup/objects/52/82c0ebc9b635cca29fe35f4eb4f4b48bef7432 new file mode 100644 index 0000000..2bcc9ec Binary files /dev/null and b/.git_backup/objects/52/82c0ebc9b635cca29fe35f4eb4f4b48bef7432 differ diff --git a/.git_backup/objects/55/99d0c3eb00d4c6374108f5db7e118a8aee8fd6 b/.git_backup/objects/55/99d0c3eb00d4c6374108f5db7e118a8aee8fd6 new file mode 100644 index 0000000..5ccc3e2 Binary files /dev/null and b/.git_backup/objects/55/99d0c3eb00d4c6374108f5db7e118a8aee8fd6 differ diff --git a/.git_backup/objects/56/7f17b0d7c7fb662c16d4357dd74830caf2dccb b/.git_backup/objects/56/7f17b0d7c7fb662c16d4357dd74830caf2dccb new file mode 100644 index 0000000..8732022 Binary files /dev/null and b/.git_backup/objects/56/7f17b0d7c7fb662c16d4357dd74830caf2dccb differ diff --git a/.git_backup/objects/57/b41a0643e2f6d42b4b739e506579df08d4ef07 b/.git_backup/objects/57/b41a0643e2f6d42b4b739e506579df08d4ef07 new file mode 100644 index 0000000..c3f9ffc Binary files /dev/null and b/.git_backup/objects/57/b41a0643e2f6d42b4b739e506579df08d4ef07 differ diff --git a/.git_backup/objects/59/26084a17082014b2ce2aa7ffdcb8367c79975b b/.git_backup/objects/59/26084a17082014b2ce2aa7ffdcb8367c79975b new file mode 100644 index 0000000..7461ec0 --- /dev/null +++ b/.git_backup/objects/59/26084a17082014b2ce2aa7ffdcb8367c79975b @@ -0,0 +1,2 @@ +xAN0 EY 7!l؀ ":dǧس}l]s? +#ŀ!Q ęOGqpnhqDGBQc)ВtaEqa xƩ-D/z:mh#Vܒʗ… ^NP>ބڬ{7b \ No newline at end of file diff --git a/.git_backup/objects/59/51bef1b73e359a640fef798c6ac78e77cc8adb b/.git_backup/objects/59/51bef1b73e359a640fef798c6ac78e77cc8adb new file mode 100644 index 0000000..6e9194a Binary files /dev/null and b/.git_backup/objects/59/51bef1b73e359a640fef798c6ac78e77cc8adb differ diff --git a/.git_backup/objects/59/d76c78d2a92c78e1c55738509bb7d3aa96f0e4 b/.git_backup/objects/59/d76c78d2a92c78e1c55738509bb7d3aa96f0e4 new file mode 100644 index 0000000..dfa5df2 Binary files /dev/null and b/.git_backup/objects/59/d76c78d2a92c78e1c55738509bb7d3aa96f0e4 differ diff --git a/.git_backup/objects/5b/0028f5541bc74a15ed94ce1ff210713f43ba53 b/.git_backup/objects/5b/0028f5541bc74a15ed94ce1ff210713f43ba53 new file mode 100644 index 0000000..26f6537 Binary files /dev/null and b/.git_backup/objects/5b/0028f5541bc74a15ed94ce1ff210713f43ba53 differ diff --git a/.git_backup/objects/5c/3b1c768973ca54e9a1befee8dc075f38e8cc56.REMOVED.git-id b/.git_backup/objects/5c/3b1c768973ca54e9a1befee8dc075f38e8cc56.REMOVED.git-id new file mode 100644 index 0000000..1f41148 --- /dev/null +++ b/.git_backup/objects/5c/3b1c768973ca54e9a1befee8dc075f38e8cc56.REMOVED.git-id @@ -0,0 +1 @@ +d6b1c5aeaeedd593db374d916b97ba299d7604ad \ No newline at end of file diff --git a/.git_backup/objects/5c/7835f64296b17d7f869701828a0399ab632081 b/.git_backup/objects/5c/7835f64296b17d7f869701828a0399ab632081 new file mode 100644 index 0000000..4b03ddc Binary files /dev/null and b/.git_backup/objects/5c/7835f64296b17d7f869701828a0399ab632081 differ diff --git a/.git_backup/objects/5d/33551b09405e7e252c6a11f080a6c9eca50f6b b/.git_backup/objects/5d/33551b09405e7e252c6a11f080a6c9eca50f6b new file mode 100644 index 0000000..97715b2 Binary files /dev/null and b/.git_backup/objects/5d/33551b09405e7e252c6a11f080a6c9eca50f6b differ diff --git a/.git_backup/objects/5e/f6a520780202a1d6addd833d800ccb1ecac0bb b/.git_backup/objects/5e/f6a520780202a1d6addd833d800ccb1ecac0bb new file mode 100644 index 0000000..61f99d9 --- /dev/null +++ b/.git_backup/objects/5e/f6a520780202a1d6addd833d800ccb1ecac0bb @@ -0,0 +1 @@ +xePAn ٯK)CU}C\@଺v[U=O1ONja.ݘcсx&jlerrƙz\՚+*;՝V;c19&e5M`tIW[Vn76nO[1mk, dl,, ?^0tT1X`J́>'l0k=N[Tqta_z{?"lRHi_l{%b=g"I0k* =(:/ \ No newline at end of file diff --git a/.git_backup/objects/61/5087732d6676f1536cc0c87acfd647abc4baf6 b/.git_backup/objects/61/5087732d6676f1536cc0c87acfd647abc4baf6 new file mode 100644 index 0000000..1498a67 Binary files /dev/null and b/.git_backup/objects/61/5087732d6676f1536cc0c87acfd647abc4baf6 differ diff --git a/.git_backup/objects/61/e36849cf7cfa9f1f71b4a3964a4953e3e243d3 b/.git_backup/objects/61/e36849cf7cfa9f1f71b4a3964a4953e3e243d3 new file mode 100644 index 0000000..d68826c Binary files /dev/null and b/.git_backup/objects/61/e36849cf7cfa9f1f71b4a3964a4953e3e243d3 differ diff --git a/.git_backup/objects/64/09c87e4c83b5bb4df12861238b30429c799e8c b/.git_backup/objects/64/09c87e4c83b5bb4df12861238b30429c799e8c new file mode 100644 index 0000000..dfe6e69 Binary files /dev/null and b/.git_backup/objects/64/09c87e4c83b5bb4df12861238b30429c799e8c differ diff --git a/.git_backup/objects/65/a8c836c47fa38dde71145d3636cf09170bb576 b/.git_backup/objects/65/a8c836c47fa38dde71145d3636cf09170bb576 new file mode 100644 index 0000000..45467bd Binary files /dev/null and b/.git_backup/objects/65/a8c836c47fa38dde71145d3636cf09170bb576 differ diff --git a/.git_backup/objects/66/1cd6b68aaf7f21408e22035b6efd34225e6dff b/.git_backup/objects/66/1cd6b68aaf7f21408e22035b6efd34225e6dff new file mode 100644 index 0000000..d453843 Binary files /dev/null and b/.git_backup/objects/66/1cd6b68aaf7f21408e22035b6efd34225e6dff differ diff --git a/.git_backup/objects/66/275472a8c50a4d015ea86127d5f59f7327ac28 b/.git_backup/objects/66/275472a8c50a4d015ea86127d5f59f7327ac28 new file mode 100644 index 0000000..c0c7562 Binary files /dev/null and b/.git_backup/objects/66/275472a8c50a4d015ea86127d5f59f7327ac28 differ diff --git a/.git_backup/objects/68/c8dc533241d3cf02cd0d90a3a758306c576cbb b/.git_backup/objects/68/c8dc533241d3cf02cd0d90a3a758306c576cbb new file mode 100644 index 0000000..aada4c0 Binary files /dev/null and b/.git_backup/objects/68/c8dc533241d3cf02cd0d90a3a758306c576cbb differ diff --git a/.git_backup/objects/69/091f0d5951ac629ff3ebe75a236a3b41d873d4 b/.git_backup/objects/69/091f0d5951ac629ff3ebe75a236a3b41d873d4 new file mode 100644 index 0000000..f0e1093 Binary files /dev/null and b/.git_backup/objects/69/091f0d5951ac629ff3ebe75a236a3b41d873d4 differ diff --git a/.git_backup/objects/6b/b27cbcda63b6d5532ba1a74176d204bff4905e b/.git_backup/objects/6b/b27cbcda63b6d5532ba1a74176d204bff4905e new file mode 100644 index 0000000..2088b8a Binary files /dev/null and b/.git_backup/objects/6b/b27cbcda63b6d5532ba1a74176d204bff4905e differ diff --git a/.git_backup/objects/6c/d12d72348931e70eaa51e9dd0dce10580206f1 b/.git_backup/objects/6c/d12d72348931e70eaa51e9dd0dce10580206f1 new file mode 100644 index 0000000..118323d Binary files /dev/null and b/.git_backup/objects/6c/d12d72348931e70eaa51e9dd0dce10580206f1 differ diff --git a/.git_backup/objects/71/8d6fea4835ec2d246af9800eddb7ffb276240c b/.git_backup/objects/71/8d6fea4835ec2d246af9800eddb7ffb276240c new file mode 100644 index 0000000..d1a82db Binary files /dev/null and b/.git_backup/objects/71/8d6fea4835ec2d246af9800eddb7ffb276240c differ diff --git a/.git_backup/objects/73/5c9591e90d897975885f0ac318a4ea71ee9078 b/.git_backup/objects/73/5c9591e90d897975885f0ac318a4ea71ee9078 new file mode 100644 index 0000000..4979079 Binary files /dev/null and b/.git_backup/objects/73/5c9591e90d897975885f0ac318a4ea71ee9078 differ diff --git a/.git_backup/objects/74/7eddbe1192a234efd4115fec1f7761ef9f5a3a b/.git_backup/objects/74/7eddbe1192a234efd4115fec1f7761ef9f5a3a new file mode 100644 index 0000000..4e20cbe Binary files /dev/null and b/.git_backup/objects/74/7eddbe1192a234efd4115fec1f7761ef9f5a3a differ diff --git a/.git_backup/objects/77/053960334e2e34dc584dea8019925c3b4ccca9 b/.git_backup/objects/77/053960334e2e34dc584dea8019925c3b4ccca9 new file mode 100644 index 0000000..d53a573 --- /dev/null +++ b/.git_backup/objects/77/053960334e2e34dc584dea8019925c3b4ccca9 @@ -0,0 +1 @@ +x- ~fâ%6 p詿QSQSkbd U.fSc=>Zs^R2F k"M=?n@)ACgWmqm+g^?3 & \ No newline at end of file diff --git a/.git_backup/objects/78/230d26fafbeeddf5ff1d18acbbbd54241597d0 b/.git_backup/objects/78/230d26fafbeeddf5ff1d18acbbbd54241597d0 new file mode 100644 index 0000000..a239ee3 Binary files /dev/null and b/.git_backup/objects/78/230d26fafbeeddf5ff1d18acbbbd54241597d0 differ diff --git a/.git_backup/objects/79/76602b67bd7bebb98837fcefa21a07ed2de01d b/.git_backup/objects/79/76602b67bd7bebb98837fcefa21a07ed2de01d new file mode 100644 index 0000000..e2e538f --- /dev/null +++ b/.git_backup/objects/79/76602b67bd7bebb98837fcefa21a07ed2de01d @@ -0,0 +1,2 @@ +xAn @Ѯ9/ +CPUtc8LWww_7j.\xY\9g׈KH!=3Ka]Ea% !0Wx^M܋_wj+0%o0hyUS ڡr__tn.ph^\> \ No newline at end of file diff --git a/.git_backup/objects/7b/f97de880f4571d867df7ae508fac8f99210d79 b/.git_backup/objects/7b/f97de880f4571d867df7ae508fac8f99210d79 new file mode 100644 index 0000000..a5f40f8 --- /dev/null +++ b/.git_backup/objects/7b/f97de880f4571d867df7ae508fac8f99210d79 @@ -0,0 +1,2 @@ +x%A0 {+,KC]DQ brq# JP.U:VY%WIb0[ +|d+kvN /|$#_ \ No newline at end of file diff --git a/.git_backup/objects/7e/363b9a8483ca3401cd76718dc404292a59f8f3 b/.git_backup/objects/7e/363b9a8483ca3401cd76718dc404292a59f8f3 new file mode 100644 index 0000000..f7afbce Binary files /dev/null and b/.git_backup/objects/7e/363b9a8483ca3401cd76718dc404292a59f8f3 differ diff --git a/.git_backup/objects/81/e81db95466264a126843b76a239068bbc702ff b/.git_backup/objects/81/e81db95466264a126843b76a239068bbc702ff new file mode 100644 index 0000000..993d0e9 Binary files /dev/null and b/.git_backup/objects/81/e81db95466264a126843b76a239068bbc702ff differ diff --git a/.git_backup/objects/82/f87f959b25e42d21408358a5bac35ac5830502 b/.git_backup/objects/82/f87f959b25e42d21408358a5bac35ac5830502 new file mode 100644 index 0000000..ae7ece8 --- /dev/null +++ b/.git_backup/objects/82/f87f959b25e42d21408358a5bac35ac5830502 @@ -0,0 +1,3 @@ +xUN ǽSެM&.K&bOwJO7©q1rs8-՝H<|0d +e/MFq^,)s" -VSJ2#zȞ]hNљgL d=kc +Ȫ&_T{ '8|{ҕK-[/{T^zcj0E\kYNzP}uAF%܈8;M4!<Ɩ]z \ No newline at end of file diff --git a/.git_backup/objects/84/d54e184f5848fff85bf75bc39e92d8c3d192e6 b/.git_backup/objects/84/d54e184f5848fff85bf75bc39e92d8c3d192e6 new file mode 100644 index 0000000..b6d26c8 Binary files /dev/null and b/.git_backup/objects/84/d54e184f5848fff85bf75bc39e92d8c3d192e6 differ diff --git a/.git_backup/objects/85/e30b4189a8ded6683599400289fcd654228d1d b/.git_backup/objects/85/e30b4189a8ded6683599400289fcd654228d1d new file mode 100644 index 0000000..ba53a26 Binary files /dev/null and b/.git_backup/objects/85/e30b4189a8ded6683599400289fcd654228d1d differ diff --git a/.git_backup/objects/86/f712609c55d6152694f9971d6ae3e1490247bc b/.git_backup/objects/86/f712609c55d6152694f9971d6ae3e1490247bc new file mode 100644 index 0000000..304a74d Binary files /dev/null and b/.git_backup/objects/86/f712609c55d6152694f9971d6ae3e1490247bc differ diff --git a/.git_backup/objects/87/f9b928e60a398b81b69a46db182b24b1c83436 b/.git_backup/objects/87/f9b928e60a398b81b69a46db182b24b1c83436 new file mode 100644 index 0000000..bd76e42 Binary files /dev/null and b/.git_backup/objects/87/f9b928e60a398b81b69a46db182b24b1c83436 differ diff --git a/.git_backup/objects/88/2196dab58259aefdc44eaa5a12e7551bc2b821 b/.git_backup/objects/88/2196dab58259aefdc44eaa5a12e7551bc2b821 new file mode 100644 index 0000000..0dfc579 Binary files /dev/null and b/.git_backup/objects/88/2196dab58259aefdc44eaa5a12e7551bc2b821 differ diff --git a/.git_backup/objects/88/a1f9a9ba23869e77d4d0fe0012ccab51332cf8 b/.git_backup/objects/88/a1f9a9ba23869e77d4d0fe0012ccab51332cf8 new file mode 100644 index 0000000..70eeba8 Binary files /dev/null and b/.git_backup/objects/88/a1f9a9ba23869e77d4d0fe0012ccab51332cf8 differ diff --git a/.git_backup/objects/8b/859758de838ea292cad530d27d46513b76f438 b/.git_backup/objects/8b/859758de838ea292cad530d27d46513b76f438 new file mode 100644 index 0000000..b90cd58 --- /dev/null +++ b/.git_backup/objects/8b/859758de838ea292cad530d27d46513b76f438 @@ -0,0 +1 @@ +xM= 0+.]A]!oB0_"Tsr.eAk&K֚Ӟ_V1~@oO8} Ǵo=f$Ȳ5"WjöWL \ No newline at end of file diff --git a/.git_backup/objects/9e/26dfeeb6e641a33dae4961196235bdb965b21b b/.git_backup/objects/9e/26dfeeb6e641a33dae4961196235bdb965b21b new file mode 100644 index 0000000..a70f72d Binary files /dev/null and b/.git_backup/objects/9e/26dfeeb6e641a33dae4961196235bdb965b21b differ diff --git a/.git_backup/objects/a0/0720b3328f4239daf5c6b99a6fa71a426cd8db b/.git_backup/objects/a0/0720b3328f4239daf5c6b99a6fa71a426cd8db new file mode 100644 index 0000000..b9ff52b Binary files /dev/null and b/.git_backup/objects/a0/0720b3328f4239daf5c6b99a6fa71a426cd8db differ diff --git a/.git_backup/objects/a0/14eb86e6d2973813ab56cefd614ea4a58ebd26 b/.git_backup/objects/a0/14eb86e6d2973813ab56cefd614ea4a58ebd26 new file mode 100644 index 0000000..9578df2 Binary files /dev/null and b/.git_backup/objects/a0/14eb86e6d2973813ab56cefd614ea4a58ebd26 differ diff --git a/.git_backup/objects/a6/aa56d0aa570437b83a9d66ca75752d412517a7 b/.git_backup/objects/a6/aa56d0aa570437b83a9d66ca75752d412517a7 new file mode 100644 index 0000000..8bb5911 Binary files /dev/null and b/.git_backup/objects/a6/aa56d0aa570437b83a9d66ca75752d412517a7 differ diff --git a/.git_backup/objects/a7/8f91b6b6f3539336bf3e2cfbcb068185c98324 b/.git_backup/objects/a7/8f91b6b6f3539336bf3e2cfbcb068185c98324 new file mode 100644 index 0000000..8a61568 Binary files /dev/null and b/.git_backup/objects/a7/8f91b6b6f3539336bf3e2cfbcb068185c98324 differ diff --git a/.git_backup/objects/ae/bf936011e394f6336603bab19f128b562b7749 b/.git_backup/objects/ae/bf936011e394f6336603bab19f128b562b7749 new file mode 100644 index 0000000..406137e Binary files /dev/null and b/.git_backup/objects/ae/bf936011e394f6336603bab19f128b562b7749 differ diff --git a/.git_backup/objects/b1/db0b09762d7cfb242ec9d47e250c7d224a32c7 b/.git_backup/objects/b1/db0b09762d7cfb242ec9d47e250c7d224a32c7 new file mode 100644 index 0000000..0d2a63b --- /dev/null +++ b/.git_backup/objects/b1/db0b09762d7cfb242ec9d47e250c7d224a32c7 @@ -0,0 +1,2 @@ +x}Mk0w2T+z|7Y9Z֧ \ No newline at end of file diff --git a/.git_backup/objects/b2/32c3b3d95034683091177b10d182e6d8c898cb b/.git_backup/objects/b2/32c3b3d95034683091177b10d182e6d8c898cb new file mode 100644 index 0000000..4d2d600 Binary files /dev/null and b/.git_backup/objects/b2/32c3b3d95034683091177b10d182e6d8c898cb differ diff --git a/.git_backup/objects/b2/b2a44f6ebc70c450043c05a002e7a93ba5d651 b/.git_backup/objects/b2/b2a44f6ebc70c450043c05a002e7a93ba5d651 new file mode 100644 index 0000000..a899069 --- /dev/null +++ b/.git_backup/objects/b2/b2a44f6ebc70c450043c05a002e7a93ba5d651 @@ -0,0 +1,2 @@ +xj0 (F)#lyt6K~rFs!XO99e +ق_Uʜȕ)$xbh@,oAGlСl'*!Q㵣Gl=يu3lbz{8שf/d</_RIZ?hi[;1MYЄ?_ɰ-m6o^h \ No newline at end of file diff --git a/.git_backup/objects/b4/8bccc5a6daef6971e74f25b18fc22c291d5d66 b/.git_backup/objects/b4/8bccc5a6daef6971e74f25b18fc22c291d5d66 new file mode 100644 index 0000000..0c107ca Binary files /dev/null and b/.git_backup/objects/b4/8bccc5a6daef6971e74f25b18fc22c291d5d66 differ diff --git a/.git_backup/objects/b5/7830c1a6b44c36ce83a5acba2bca7b403a2e92 b/.git_backup/objects/b5/7830c1a6b44c36ce83a5acba2bca7b403a2e92 new file mode 100644 index 0000000..174ed96 --- /dev/null +++ b/.git_backup/objects/b5/7830c1a6b44c36ce83a5acba2bca7b403a2e92 @@ -0,0 +1 @@ +xAN0EYsTc;'!n@g\qR=aǞ/RSo` Q(,:@$3uHdN͍nfBu18L٩Xю66NxHU^Ke=Z^ A֮{1yye{_\ \ No newline at end of file diff --git a/.git_backup/objects/b5/f3b08deedb8dc5824c4441201f1e9af7e2b627 b/.git_backup/objects/b5/f3b08deedb8dc5824c4441201f1e9af7e2b627 new file mode 100644 index 0000000..e12fb0f Binary files /dev/null and b/.git_backup/objects/b5/f3b08deedb8dc5824c4441201f1e9af7e2b627 differ diff --git a/.git_backup/objects/b8/e30c7d5e5b53bc734ab290a6c0190ef9b37c88 b/.git_backup/objects/b8/e30c7d5e5b53bc734ab290a6c0190ef9b37c88 new file mode 100644 index 0000000..8bf2832 Binary files /dev/null and b/.git_backup/objects/b8/e30c7d5e5b53bc734ab290a6c0190ef9b37c88 differ diff --git a/.git_backup/objects/b9/99e70428ef136e95e91d75e925bf4324b10854 b/.git_backup/objects/b9/99e70428ef136e95e91d75e925bf4324b10854 new file mode 100644 index 0000000..619a354 Binary files /dev/null and b/.git_backup/objects/b9/99e70428ef136e95e91d75e925bf4324b10854 differ diff --git a/.git_backup/objects/ba/57965389036194d6dd60e6de33d2e1e1bbf20b.REMOVED.git-id b/.git_backup/objects/ba/57965389036194d6dd60e6de33d2e1e1bbf20b.REMOVED.git-id new file mode 100644 index 0000000..84de059 --- /dev/null +++ b/.git_backup/objects/ba/57965389036194d6dd60e6de33d2e1e1bbf20b.REMOVED.git-id @@ -0,0 +1 @@ +074351391aceff1fe8e242c5358408e2c96b58df \ No newline at end of file diff --git a/.git_backup/objects/bc/9ce0c146092dcca74f567441821db5052dd1e6 b/.git_backup/objects/bc/9ce0c146092dcca74f567441821db5052dd1e6 new file mode 100644 index 0000000..da2001a Binary files /dev/null and b/.git_backup/objects/bc/9ce0c146092dcca74f567441821db5052dd1e6 differ diff --git a/.git_backup/objects/bc/ffc3365a08c3a2a6fb06ce334055e7b5f31626 b/.git_backup/objects/bc/ffc3365a08c3a2a6fb06ce334055e7b5f31626 new file mode 100644 index 0000000..4e8b774 Binary files /dev/null and b/.git_backup/objects/bc/ffc3365a08c3a2a6fb06ce334055e7b5f31626 differ diff --git a/.git_backup/objects/bd/e2ebb13ebea949eb4efcd4379a7377671e9730 b/.git_backup/objects/bd/e2ebb13ebea949eb4efcd4379a7377671e9730 new file mode 100644 index 0000000..ef00806 Binary files /dev/null and b/.git_backup/objects/bd/e2ebb13ebea949eb4efcd4379a7377671e9730 differ diff --git a/.git_backup/objects/bd/f2d4d51da790e75f6d22c6f85a168f6893deeb b/.git_backup/objects/bd/f2d4d51da790e75f6d22c6f85a168f6893deeb new file mode 100644 index 0000000..fc17738 Binary files /dev/null and b/.git_backup/objects/bd/f2d4d51da790e75f6d22c6f85a168f6893deeb differ diff --git a/.git_backup/objects/bf/9e938d16bb605c04eb9d52c008f4c2e45b612f b/.git_backup/objects/bf/9e938d16bb605c04eb9d52c008f4c2e45b612f new file mode 100644 index 0000000..e64d9bd Binary files /dev/null and b/.git_backup/objects/bf/9e938d16bb605c04eb9d52c008f4c2e45b612f differ diff --git a/.git_backup/objects/c0/3712436a6f04d1d2de66481ea3e1ebe5da131c b/.git_backup/objects/c0/3712436a6f04d1d2de66481ea3e1ebe5da131c new file mode 100644 index 0000000..75f5039 Binary files /dev/null and b/.git_backup/objects/c0/3712436a6f04d1d2de66481ea3e1ebe5da131c differ diff --git a/.git_backup/objects/c0/85bd39b04f32f89e05277000bfdb333056cdc4 b/.git_backup/objects/c0/85bd39b04f32f89e05277000bfdb333056cdc4 new file mode 100644 index 0000000..7d7a528 Binary files /dev/null and b/.git_backup/objects/c0/85bd39b04f32f89e05277000bfdb333056cdc4 differ diff --git a/.git_backup/objects/c1/87027ddeec884723e3e493ce774cb247180835 b/.git_backup/objects/c1/87027ddeec884723e3e493ce774cb247180835 new file mode 100644 index 0000000..89784f9 --- /dev/null +++ b/.git_backup/objects/c1/87027ddeec884723e3e493ce774cb247180835 @@ -0,0 +1,8 @@ +xVn8g} 4) A d[,l$Q%M]#Ë$綨"9<3B6ը sTX럩hЧV20!lQuy74U&ySbe0sf ';qb,Ca[7at)`xAw؛ųw@Go7c80ÃDϒˋ r 'k%K%˙ah +wݿոKP2iXVB؎“T ꂙ\C 5&{OjƳl)yK5L0kYCOys%+ JVCQ;HВo6",{8ХEUlbWlҌF%_n+].(,_AhQi*Q9Lp3,4R\w/|l8G(6k)s^+HGImUҎq#%F%\(limUjץ ++iڐG6HiTՅ> ++]#-:拀 3j7 驳#4ᆵ4VDM + +W4;!Z֭K6m"hޏOg%u +lb] D}jւ2,ئc{ߟ_ ӽBNЮB&#yT^cwSrQh:}o[ _Rմ?G]M.ʡ&14:2#%-`6{ShhuxoWLc _E j`]k]7Lܲ|Noű wdB'}v=Mpk6ަ^'ίO'|kCaŠ%xfL;ՔA8vett%v^Vzr{/agZ?0QFBneY\{A[ m/A:cvNf[&}qp@Ii +x%U= ug?: \ No newline at end of file diff --git a/.git_backup/objects/c3/fe14250f915d03e0409344a0845c3c478084f5 b/.git_backup/objects/c3/fe14250f915d03e0409344a0845c3c478084f5 new file mode 100644 index 0000000..1095837 Binary files /dev/null and b/.git_backup/objects/c3/fe14250f915d03e0409344a0845c3c478084f5 differ diff --git a/.git_backup/objects/c4/1cffcf2f11e0f73334edd4421799c4a2ae1cff b/.git_backup/objects/c4/1cffcf2f11e0f73334edd4421799c4a2ae1cff new file mode 100644 index 0000000..314a6ef Binary files /dev/null and b/.git_backup/objects/c4/1cffcf2f11e0f73334edd4421799c4a2ae1cff differ diff --git a/.git_backup/objects/c8/0054b58ebb62e1c5b99355269aa9e32dbed78a b/.git_backup/objects/c8/0054b58ebb62e1c5b99355269aa9e32dbed78a new file mode 100644 index 0000000..59982c6 Binary files /dev/null and b/.git_backup/objects/c8/0054b58ebb62e1c5b99355269aa9e32dbed78a differ diff --git a/.git_backup/objects/c8/a3e774cfd1bbb2796e43538679f5ed1ececc2e b/.git_backup/objects/c8/a3e774cfd1bbb2796e43538679f5ed1ececc2e new file mode 100644 index 0000000..15b5bc4 Binary files /dev/null and b/.git_backup/objects/c8/a3e774cfd1bbb2796e43538679f5ed1ececc2e differ diff --git a/.git_backup/objects/ca/8c2051e45cd5ebf10c5c4a5726c03f87961c6a b/.git_backup/objects/ca/8c2051e45cd5ebf10c5c4a5726c03f87961c6a new file mode 100644 index 0000000..b35b356 Binary files /dev/null and b/.git_backup/objects/ca/8c2051e45cd5ebf10c5c4a5726c03f87961c6a differ diff --git a/.git_backup/objects/cb/68061f4e0d8fbeeb9f785ed643c3e485e5b3e2 b/.git_backup/objects/cb/68061f4e0d8fbeeb9f785ed643c3e485e5b3e2 new file mode 100644 index 0000000..82fe496 Binary files /dev/null and b/.git_backup/objects/cb/68061f4e0d8fbeeb9f785ed643c3e485e5b3e2 differ diff --git a/.git_backup/objects/cb/a2656cff455d0aa6831e515744152e3e823fd3 b/.git_backup/objects/cb/a2656cff455d0aa6831e515744152e3e823fd3 new file mode 100644 index 0000000..bbe6f9b Binary files /dev/null and b/.git_backup/objects/cb/a2656cff455d0aa6831e515744152e3e823fd3 differ diff --git a/.git_backup/objects/cc/34776689d701aab8a3cc6994bfc6b3e3803a4f b/.git_backup/objects/cc/34776689d701aab8a3cc6994bfc6b3e3803a4f new file mode 100644 index 0000000..9f95bca --- /dev/null +++ b/.git_backup/objects/cc/34776689d701aab8a3cc6994bfc6b3e3803a4f @@ -0,0 +1,2 @@ +xmSˎ0 yRlyi ?@,nP쿗d rJ!CJfe{˲\5Y~6Z9P}G`xtg&D1:!φ=\}UU7[v8dfRscMsR'U<E2W5ƱvNo'!؉J"$rK0&aD:?fljX.pO%/"ᇻ`WGrHX󚧌A Nʊk)Lhк.iyxh ̒jKygRAa*^@KE엫xR +z-V¸޹FȿBhuKiq|~4kvRvQZmA0 Dzv5gӌ+ bj6-dTC0plwsǒdNGoݍeK]h9 BF'1Sz.7-e}aiRf.lke?u\ +R.r&̫\b f͖p1:\ +QaȰrlLN)!="\^iJbg3PC*$cV{PGƴƣ,t* Uɾ,F"?qwnyHE̥F-UiZ+4%cO 2V/\}bhO} Õ;pDnj 6h:z*_8). \ No newline at end of file diff --git a/.git_backup/objects/f2/5b494952e1d6c1cc51e8e748d92a5704094d13 b/.git_backup/objects/f2/5b494952e1d6c1cc51e8e748d92a5704094d13 new file mode 100644 index 0000000..0fd67a1 Binary files /dev/null and b/.git_backup/objects/f2/5b494952e1d6c1cc51e8e748d92a5704094d13 differ diff --git a/.git_backup/objects/f2/c496a74bba365263cfa7e9015b431f06ad24ee b/.git_backup/objects/f2/c496a74bba365263cfa7e9015b431f06ad24ee new file mode 100644 index 0000000..40ef5ef Binary files /dev/null and b/.git_backup/objects/f2/c496a74bba365263cfa7e9015b431f06ad24ee differ diff --git a/.git_backup/objects/f7/94def37de7b989354e76bd5c77b40014d7f37c b/.git_backup/objects/f7/94def37de7b989354e76bd5c77b40014d7f37c new file mode 100644 index 0000000..57c2421 Binary files /dev/null and b/.git_backup/objects/f7/94def37de7b989354e76bd5c77b40014d7f37c differ diff --git a/.git_backup/objects/f7/ded8a53398b171034dffd51348d3ec0269a9ce b/.git_backup/objects/f7/ded8a53398b171034dffd51348d3ec0269a9ce new file mode 100644 index 0000000..26c4432 Binary files /dev/null and b/.git_backup/objects/f7/ded8a53398b171034dffd51348d3ec0269a9ce differ diff --git a/.git_backup/objects/f7/ea8126c745c0d3479c5e11339a2053357e03c6 b/.git_backup/objects/f7/ea8126c745c0d3479c5e11339a2053357e03c6 new file mode 100644 index 0000000..84c367e --- /dev/null +++ b/.git_backup/objects/f7/ea8126c745c0d3479c5e11339a2053357e03c6 @@ -0,0 +1 @@ +xRj1Y_!$]H/:NhM5Ks04Ddi+n!mD޼yoF ޼= `ˎ6R)I2)*YהpUp#4y3[m._V>t褺'ρ`wDt۶BHGG#q{QWҕº|bh=8J_ TV_,c[ QTk[ORœ;lZ&/:qq6=X}0V'"on7y"IBs/47'1ց \ No newline at end of file diff --git a/.git_backup/objects/f8/695e4f3497b7dd56bf20b2dd38429740e82d89 b/.git_backup/objects/f8/695e4f3497b7dd56bf20b2dd38429740e82d89 new file mode 100644 index 0000000..0cad8ec Binary files /dev/null and b/.git_backup/objects/f8/695e4f3497b7dd56bf20b2dd38429740e82d89 differ diff --git a/.git_backup/objects/f9/1464067002d15a25d5ef9cb4f1cf2f7a1c1bb6 b/.git_backup/objects/f9/1464067002d15a25d5ef9cb4f1cf2f7a1c1bb6 new file mode 100644 index 0000000..bbc2cd2 --- /dev/null +++ b/.git_backup/objects/f9/1464067002d15a25d5ef9cb4f1cf2f7a1c1bb6 @@ -0,0 +1,2 @@ +xMn ),֍\jcZGܽ08EU G%TSA䐿=H#}!@YIgd@6:ު/xܐe``8ܠy3q +}iR0✶J-eTGcONc8ie_hl`/W|)c|y-gS aņ]T;ܲљuz:kΖеrT EOtϙ\HȄ \ No newline at end of file diff --git a/.git_backup/objects/f9/7282690c47cb3529d24cddd443dc93a36e481d b/.git_backup/objects/f9/7282690c47cb3529d24cddd443dc93a36e481d new file mode 100644 index 0000000..f9e1e9f Binary files /dev/null and b/.git_backup/objects/f9/7282690c47cb3529d24cddd443dc93a36e481d differ diff --git a/.git_backup/objects/fb/a474bd16f97fae78a951fb7434b966ac54cb0a b/.git_backup/objects/fb/a474bd16f97fae78a951fb7434b966ac54cb0a new file mode 100644 index 0000000..b872192 Binary files /dev/null and b/.git_backup/objects/fb/a474bd16f97fae78a951fb7434b966ac54cb0a differ diff --git a/.git_backup/objects/fe/2f7027d9dc88269ac61b45653419f1b612cd57 b/.git_backup/objects/fe/2f7027d9dc88269ac61b45653419f1b612cd57 new file mode 100644 index 0000000..815700c Binary files /dev/null and b/.git_backup/objects/fe/2f7027d9dc88269ac61b45653419f1b612cd57 differ diff --git a/.git_backup/objects/fe/5c684fa41ccf3103291717f49208c8a33fb314 b/.git_backup/objects/fe/5c684fa41ccf3103291717f49208c8a33fb314 new file mode 100644 index 0000000..3dcc283 Binary files /dev/null and b/.git_backup/objects/fe/5c684fa41ccf3103291717f49208c8a33fb314 differ diff --git a/.git_backup/objects/fe/b48415c2e37cc043093fe166fa8ec7be3ce6d4 b/.git_backup/objects/fe/b48415c2e37cc043093fe166fa8ec7be3ce6d4 new file mode 100644 index 0000000..9b2f519 --- /dev/null +++ b/.git_backup/objects/fe/b48415c2e37cc043093fe166fa8ec7be3ce6d4 @@ -0,0 +1 @@ +xMK0=W4-O= &&_lxLgwl-.Osֳ/ay3qfd /OL/ӖٕyNV6pyQEsFQF14RyY:55PW}6e=.RoύJƾð5;|p l}<'*3?bm/߉juwxk/" \ No newline at end of file diff --git a/.git_backup/objects/ff/faa9634730cb45f160b3ce6e0b583a6be55239 b/.git_backup/objects/ff/faa9634730cb45f160b3ce6e0b583a6be55239 new file mode 100644 index 0000000..b53a4af Binary files /dev/null and b/.git_backup/objects/ff/faa9634730cb45f160b3ce6e0b583a6be55239 differ diff --git a/.git_backup/refs/heads/main b/.git_backup/refs/heads/main new file mode 100644 index 0000000..807f984 --- /dev/null +++ b/.git_backup/refs/heads/main @@ -0,0 +1 @@ +5926084a17082014b2ce2aa7ffdcb8367c79975b diff --git a/.git_backup/refs/remotes/origin/main b/.git_backup/refs/remotes/origin/main new file mode 100644 index 0000000..807f984 --- /dev/null +++ b/.git_backup/refs/remotes/origin/main @@ -0,0 +1 @@ +5926084a17082014b2ce2aa7ffdcb8367c79975b diff --git a/README.md b/README.md index ffa0a9d..06bc94d 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,7 @@ volumes: If you just want to run the dashboard without dealing with terminal commands: 1. Go to the **[Releases](../../releases)** tab on the right side of this GitHub page. -2. Download the `ShadowBroker_v0.2.zip` file. +2. Download the `ShadowBroker_v0.3.zip` file. 3. Extract the folder to your computer. 4. **Windows:** Double-click `start.bat`. **Mac/Linux:** Open terminal, type `chmod +x start.sh`, and run `./start.sh`. diff --git a/ShadowBroker_v0.1.zip.REMOVED.git-id b/ShadowBroker_v0.1.zip.REMOVED.git-id index 20def34..3842ff7 100644 --- a/ShadowBroker_v0.1.zip.REMOVED.git-id +++ b/ShadowBroker_v0.1.zip.REMOVED.git-id @@ -1 +1 @@ -ba57965389036194d6dd60e6de33d2e1e1bbf20b \ No newline at end of file +725818adb1faf637d6aace661a863e50db6c849f \ No newline at end of file diff --git a/ShadowBroker_v0.2.zip.REMOVED.git-id b/ShadowBroker_v0.2.zip.REMOVED.git-id new file mode 100644 index 0000000..cc36414 --- /dev/null +++ b/ShadowBroker_v0.2.zip.REMOVED.git-id @@ -0,0 +1 @@ +f63a47088222c30d1d3fd95efb764e9d8d681ab4 \ No newline at end of file diff --git a/ShadowBroker_v0.3.zip.REMOVED.git-id b/ShadowBroker_v0.3.zip.REMOVED.git-id new file mode 100644 index 0000000..9700ca9 --- /dev/null +++ b/ShadowBroker_v0.3.zip.REMOVED.git-id @@ -0,0 +1 @@ +1d83b29e265e3baf11f86074bae85d5b45fda348 \ No newline at end of file diff --git a/backend/services/ais_cache.json.REMOVED.git-id b/backend/services/ais_cache.json.REMOVED.git-id index e86301b..5b2fba6 100644 --- a/backend/services/ais_cache.json.REMOVED.git-id +++ b/backend/services/ais_cache.json.REMOVED.git-id @@ -1 +1 @@ -d26d4853d26982fe4435566ea7c74b154af9be5f \ No newline at end of file +e40be55abe156d5608ae260604e6c9cdd271e554 \ No newline at end of file diff --git a/backend/services/api_settings.py b/backend/services/api_settings.py index c085bd3..b254bda 100644 --- a/backend/services/api_settings.py +++ b/backend/services/api_settings.py @@ -145,12 +145,12 @@ def get_api_keys(): "has_key": api["env_key"] is not None, "env_key": api["env_key"], "value_obfuscated": None, - "value_plain": None, + "is_set": False, } if api["env_key"]: raw = os.environ.get(api["env_key"], "") entry["value_obfuscated"] = _obfuscate(raw) - entry["value_plain"] = raw # Sent only when reveal is requested + entry["is_set"] = bool(raw) result.append(entry) return result diff --git a/clean_zip.py b/clean_zip.py index 3cda542..d4766bc 100644 --- a/clean_zip.py +++ b/clean_zip.py @@ -1,7 +1,7 @@ import os import zipfile -zip_name = 'ShadowBroker_v0.1.zip' +zip_name = 'ShadowBroker_v0.3.zip' if os.path.exists(zip_name): try: diff --git a/frontend/build_output.txt b/frontend/build_output.txt new file mode 100644 index 0000000..f9f50bf --- /dev/null +++ b/frontend/build_output.txt @@ -0,0 +1,92 @@ +#0 building with "desktop-linux" instance using docker driver + +#1 [internal] load build definition from Dockerfile +#1 transferring dockerfile: 838B 0.0s done +#1 DONE 0.0s + +#2 [auth] library/node:pull token for registry-1.docker.io +#2 DONE 0.0s + +#3 [internal] load metadata for docker.io/library/node:18-alpine +#3 DONE 0.6s + +#4 [internal] load .dockerignore +#4 transferring context: 207B 0.0s done +#4 DONE 0.0s + +#5 [base 1/1] FROM docker.io/library/node:18-alpine@sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e +#5 resolve docker.io/library/node:18-alpine@sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e 0.0s done +#5 DONE 0.0s + +#6 [runner 2/8] RUN addgroup --system --gid 1001 nodejs +#6 CACHED + +#7 [builder 1/4] WORKDIR /app +#7 CACHED + +#8 [runner 3/8] RUN adduser --system --uid 1001 nextjs +#8 CACHED + +#9 [internal] load build context +#9 transferring context: 3.49kB done +#9 DONE 0.0s + +#10 [deps 1/4] RUN apk add --no-cache libc6-compat +#10 CACHED + +#11 [deps 2/4] WORKDIR /app +#11 CACHED + +#12 [deps 3/4] COPY package*.json ./ +#12 CACHED + +#13 [deps 4/4] RUN npm ci +#13 CACHED + +#14 [builder 2/4] COPY --from=deps /app/node_modules ./node_modules +#14 CACHED + +#15 [builder 3/4] COPY . . +#15 DONE 0.0s + +#16 [builder 4/4] RUN npm run build +#16 1.391 +#16 1.391 > frontend@0.2.0 build +#16 1.391 > next build +#16 1.391 +#16 1.821 You are using Node.js 18.20.8. For Next.js, Node.js version ">=20.9.0" is required. +#16 1.837 npm notice +#16 1.837 npm notice New major version of npm available! 10.8.2 -> 11.11.0 +#16 1.837 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.11.0 +#16 1.837 npm notice To update run: npm install -g npm@11.11.0 +#16 1.837 npm notice +#16 ERROR: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1 +------ + > [builder 4/4] RUN npm run build: +1.391 +1.391 > frontend@0.2.0 build +1.391 > next build +1.391 +1.821 You are using Node.js 18.20.8. For Next.js, Node.js version ">=20.9.0" is required. +1.837 npm notice +1.837 npm notice New major version of npm available! 10.8.2 -> 11.11.0 +1.837 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.11.0 +1.837 npm notice To update run: npm install -g npm@11.11.0 +1.837 npm notice +------ + + 5 warnings found (use docker --debug to expand): + - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 13) + - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 18) + - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 19) + - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 35) + - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 36) +Dockerfile:14 +-------------------- + 12 | COPY . . + 13 | ENV NEXT_TELEMETRY_DISABLED 1 + 14 | >>> RUN npm run build + 15 | + 16 | FROM base AS runner +-------------------- +ERROR: failed to build: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1 diff --git a/frontend/package.json b/frontend/package.json index cc34776..5e5ee4b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "frontend", - "version": "0.2.0", + "version": "0.3.0", "private": true, "scripts": { "dev": "concurrently \"npm run dev:frontend\" \"npm run dev:backend\"", @@ -12,17 +12,12 @@ }, "dependencies": { "@mapbox/point-geometry": "^1.1.0", - "@types/leaflet": "^1.9.21", - "@types/mapbox-gl": "^3.4.1", "framer-motion": "^12.34.3", - "leaflet": "^1.9.4", "lucide-react": "^0.575.0", - "mapbox-gl": "^3.19.0", "maplibre-gl": "^4.7.1", "next": "16.1.6", "react": "19.2.3", "react-dom": "19.2.3", - "react-leaflet": "^5.0.0", "react-map-gl": "^8.1.0", "satellite.js": "^6.0.2" }, diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 8b1bba6..b12fc01 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -15,6 +15,7 @@ import SettingsPanel from "@/components/SettingsPanel"; import MapLegend from "@/components/MapLegend"; import ScaleBar from "@/components/ScaleBar"; import ErrorBoundary from "@/components/ErrorBoundary"; +import OnboardingModal, { useOnboarding } from "@/components/OnboardingModal"; // Use dynamic loads for Maplibre to avoid SSR window is not defined errors const MaplibreViewer = dynamic(() => import('@/components/MaplibreViewer'), { ssr: false }); @@ -75,6 +76,10 @@ export default function Dashboard() { // Mouse coordinate + reverse geocoding state const [mouseCoords, setMouseCoords] = useState<{ lat: number, lng: number } | null>(null); const [locationLabel, setLocationLabel] = useState(''); + + // Onboarding & connection status + const { showOnboarding, setShowOnboarding } = useOnboarding(); + const [backendStatus, setBackendStatus] = useState<'connecting' | 'connected' | 'disconnected'>('connecting'); const geocodeCache = useRef>(new Map()); const geocodeTimer = useRef | null>(null); @@ -177,8 +182,9 @@ export default function Dashboard() { const headers: Record = {}; if (fastEtag.current) headers['If-None-Match'] = fastEtag.current; const res = await fetch(`${API_BASE}/api/live-data/fast`, { headers }); - if (res.status === 304) return; // Data unchanged, skip update + if (res.status === 304) { setBackendStatus('connected'); return; } if (res.ok) { + setBackendStatus('connected'); fastEtag.current = res.headers.get('etag') || null; const json = await res.json(); dataRef.current = { ...dataRef.current, ...json }; @@ -186,6 +192,7 @@ export default function Dashboard() { } } catch (e) { console.error("Failed fetching fast live data", e); + setBackendStatus('disconnected'); } }; @@ -426,6 +433,23 @@ export default function Dashboard() { {/* MAP LEGEND */} setLegendOpen(false)} /> + {/* ONBOARDING MODAL */} + {showOnboarding && ( + setShowOnboarding(false)} + onOpenSettings={() => { setShowOnboarding(false); setSettingsOpen(true); }} + /> + )} + + {/* BACKEND DISCONNECTED BANNER */} + {backendStatus === 'disconnected' && ( +
+ + BACKEND OFFLINE — Cannot reach {API_BASE}. Start the backend server or check your connection. + +
+ )} + ); } diff --git a/frontend/src/components/LeafletViewer.tsx b/frontend/src/components/LeafletViewer.tsx deleted file mode 100644 index 81e81db..0000000 --- a/frontend/src/components/LeafletViewer.tsx +++ /dev/null @@ -1,304 +0,0 @@ -"use client"; - -import React, { useEffect, useState, useRef } from "react"; -import { MapContainer, TileLayer, Marker, Popup, useMap, Tooltip, CircleMarker, useMapEvents } from "react-leaflet"; -import L from "leaflet"; -import "leaflet/dist/leaflet.css"; - -// Fix standard leaflet icon path issues in React -delete (L.Icon.Default.prototype as any)._getIconUrl; -L.Icon.Default.mergeOptions({ - iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png', - iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png', - shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png', -}); - -// Create custom icons dynamically for the layers -const createDivIcon = (svg: string, size = 16, rotate = 0) => { - return L.divIcon({ - className: 'custom-div-icon', - html: `
${svg}
`, - iconSize: [size, size], - iconAnchor: [size / 2, size / 2] - }); -}; - -const svgPlaneCyan = ``; -const svgPlaneOrange = ``; -const svgPlaneRed = ``; -const svgShip = ``; -const svgThreat = ``; -const svgTriangleYellow = ``; -const svgTriangleRed = ``; - -// Helper component to center map when Find Locater is used -function MapCenterControl({ location }: { location: { lat: number, lng: number } | null }) { - const map = useMap(); - useEffect(() => { - if (location) { - map.flyTo([location.lat, location.lng], 8, { duration: 1.5 }); - } - }, [location, map]); - return null; -} - -// Eavesdrop mode controller -function ClickHandler({ isEavesdropping, onEavesdropClick }: any) { - const map = useMap(); - useEffect(() => { - if (!isEavesdropping) return; - const cb = (e: any) => onEavesdropClick({ lat: e.latlng.lat, lng: e.latlng.lng }); - map.on('click', cb); - return () => { map.off('click', cb); }; - }, [isEavesdropping, map, onEavesdropClick]); - return null; -} - -// Map state tracker for LOD -function MapStateTracker({ onStateChange }: { onStateChange: (zoom: number, bounds: L.LatLngBounds) => void }) { - const map = useMapEvents({ - moveend: () => onStateChange(map.getZoom(), map.getBounds()), - zoomend: () => onStateChange(map.getZoom(), map.getBounds()), - }); - useEffect(() => { - onStateChange(map.getZoom(), map.getBounds()); - }, [map, onStateChange]); - return null; -} - -export default function LeafletViewer({ data, activeLayers, activeFilters, effects, onEntityClick, selectedEntity, flyToLocation, isEavesdropping, onEavesdropClick, onCameraMove }: any) { - const [zoom, setZoom] = useState(3); - const [bounds, setBounds] = useState(null); - - const handleMapState = (z: number, b: L.LatLngBounds) => { - setZoom(z); - setBounds(b); - }; - - const isVisible = (lat: number, lng: number) => { - if (!bounds) return true; - return bounds.pad(0.2).contains([lat, lng]); - }; - - return ( -
- - - - - - {/* Dark Mode Satellite Stamen / CartoDB Voyager basemap substitute */} - - - {/* --- COMMERCIAL FLIGHTS --- */} - {activeLayers.flights && data?.commercial_flights?.map((f: any, idx: number) => { - if (f.lat == null || f.lng == null) return null; - if (zoom >= 6 && !isVisible(f.lat, f.lng)) return null; - - if (zoom < 6) { - return ( - onEntityClick?.({ type: 'flight', id: idx, callsign: f.callsign || f.icao24 }) }} - /> - ); - } - - const icon = createDivIcon(svgPlaneCyan, 18, f.true_track || f.heading || 0); - return ( - onEntityClick?.({ type: 'flight', id: idx, callsign: f.callsign || f.icao24 }) }} - > - -
{f.callsign || f.icao24}
-
-
- ); - })} - - {/* --- PRIVATE FLIGHTS --- */} - {activeLayers.private && data?.private_flights?.map((f: any, idx: number) => { - if (f.lat == null || f.lng == null) return null; - if (zoom >= 6 && !isVisible(f.lat, f.lng)) return null; - - if (zoom < 6) { - return ( - onEntityClick?.({ type: 'private_flight', id: idx, callsign: f.callsign || f.icao24 }) }} - /> - ); - } - - const icon = createDivIcon(svgPlaneOrange, 18, f.true_track || f.heading || 0); - return ( - onEntityClick?.({ type: 'private_flight', id: idx, callsign: f.callsign || f.icao24 }) }} - > - -
{f.callsign || f.icao24}
-
-
- ); - })} - - {/* --- MILITARY FLIGHTS --- */} - {activeLayers.military && data?.military_flights?.map((f: any, idx: number) => { - if (f.lat == null || f.lng == null) return null; - if (zoom >= 6 && !isVisible(f.lat, f.lng)) return null; - - if (zoom < 6) { - return ( - onEntityClick?.({ type: 'military_flight', id: idx, callsign: f.callsign || f.icao24 }) }} - /> - ); - } - - const icon = createDivIcon(svgPlaneRed, 20, f.true_track || f.heading || 0); - return ( - onEntityClick?.({ type: 'military_flight', id: idx, callsign: f.callsign || f.icao24 }) }} - > - -
{f.callsign || f.icao24}
-
-
- ); - })} - - {/* --- SHIPS --- */} - {(activeLayers.ships_important || activeLayers.ships_civilian || activeLayers.ships_passenger) && data?.ships?.map((s: any, idx: number) => { - if (s.lat == null || s.lng == null) return null; - if (zoom >= 6 && !isVisible(s.lat, s.lng)) return null; - - if (zoom < 6) { - return ( - onEntityClick?.({ type: 'ship', id: idx, name: s.name }) }} - /> - ); - } - - const icon = createDivIcon(svgShip, 12, s.heading || 0); - return ( - onEntityClick?.({ type: 'ship', id: idx, name: s.name }) }} - > - -
{s.name}
-
-
- ); - })} - - {/* --- GDELT GLOBAL INCIDENTS --- */} - {activeLayers.global_incidents && data?.gdelt?.map((incident: any, idx: number) => { - const geom = incident.geometry; - if (!geom || geom.type !== 'Point' || !geom.coordinates) return null; - const lng = geom.coordinates[0]; - const lat = geom.coordinates[1]; - if (!isVisible(lat, lng)) return null; - - return ( - onEntityClick?.({ type: 'gdelt', id: idx }) }} - > - -
- {incident.title} -
-
-
- ); - })} - - {/* --- LIVEUAMAP INCIDENTS --- */} - {activeLayers.global_incidents && data?.liveuamap?.map((incident: any, idx: number) => { - if (incident.lat == null || incident.lng == null) return null; - if (!isVisible(incident.lat, incident.lng)) return null; - const isViolent = /bomb|missil|strike|attack|kill|destroy|fire|shoot|expl|raid/i.test(incident.title || ""); - const icon = createDivIcon(isViolent ? svgTriangleRed : svgTriangleYellow, 18); - return ( - onEntityClick?.({ type: 'liveuamap', id: incident.id, title: incident.title }) }} - > - -
- [LIVEUA] {incident.title} -
-
-
- ); - })} - - {/* --- RSS THREAT ALERTS --- */} - {activeLayers.global_incidents && data?.news?.filter((n: any) => n.coordinates)?.map((n: any, idx: number) => { - if (n.coordinates.lat == null || n.coordinates.lng == null) return null; - if (!isVisible(n.coordinates.lat, n.coordinates.lng)) return null; - const icon = createDivIcon(svgThreat, 24); - return ( - onEntityClick?.({ type: 'news', id: idx }) }} - > - -
- !! LVL {n.threat_level} !!
- {n.title.substring(0, 30)}... -
-
-
- ); - })} - -
-
- ); -} diff --git a/frontend/src/components/OnboardingModal.tsx b/frontend/src/components/OnboardingModal.tsx new file mode 100644 index 0000000..bb70b16 --- /dev/null +++ b/frontend/src/components/OnboardingModal.tsx @@ -0,0 +1,288 @@ +"use client"; + +import React, { useState, useEffect } from "react"; +import { motion, AnimatePresence } from "framer-motion"; +import { X, ExternalLink, Key, Shield, Radar, Globe, Satellite, Ship, Radio } from "lucide-react"; + +const STORAGE_KEY = "shadowbroker_onboarding_complete"; + +const API_GUIDES = [ + { + name: "OpenSky Network", + icon: , + required: true, + description: "Flight tracking with global ADS-B coverage. Provides real-time aircraft positions.", + steps: [ + "Create a free account at opensky-network.org", + "Go to Dashboard → OAuth → Create Client", + "Copy your Client ID and Client Secret", + "Paste both into Settings → Aviation", + ], + url: "https://opensky-network.org/index.php?option=com_users&view=registration", + color: "cyan", + }, + { + name: "AIS Stream", + icon: , + required: true, + description: "Real-time vessel tracking via AIS (Automatic Identification System).", + steps: [ + "Register at aisstream.io", + "Navigate to your API Keys page", + "Generate a new API key", + "Paste it into Settings → Maritime", + ], + url: "https://aisstream.io/authenticate", + color: "blue", + }, +]; + +const FREE_SOURCES = [ + { name: "ADS-B Exchange", desc: "Military & general aviation", icon: }, + { name: "USGS Earthquakes", desc: "Global seismic data", icon: }, + { name: "CelesTrak", desc: "2,000+ satellite orbits", icon: }, + { name: "GDELT Project", desc: "Global conflict events", icon: }, + { name: "RainViewer", desc: "Weather radar overlay", icon: }, + { name: "OpenMHz", desc: "Radio scanner feeds", icon: }, + { name: "RSS Feeds", desc: "NPR, BBC, Reuters, AP", icon: }, + { name: "Yahoo Finance", desc: "Defense stocks & oil", icon: }, +]; + +interface OnboardingModalProps { + onClose: () => void; + onOpenSettings: () => void; +} + +const OnboardingModal = React.memo(function OnboardingModal({ onClose, onOpenSettings }: OnboardingModalProps) { + const [step, setStep] = useState(0); + + const handleDismiss = () => { + localStorage.setItem(STORAGE_KEY, "true"); + onClose(); + }; + + const handleOpenSettings = () => { + localStorage.setItem(STORAGE_KEY, "true"); + onClose(); + onOpenSettings(); + }; + + return ( + + {/* Backdrop */} + + + {/* Modal */} + +
e.stopPropagation()} + > + {/* Header */} +
+
+
+
+ +
+
+

MISSION BRIEFING

+ FIRST-TIME SETUP +
+
+ +
+
+ + {/* Step Indicators */} +
+ {["Welcome", "API Keys", "Free Sources"].map((label, i) => ( + + ))} +
+ + {/* Content */} +
+ {step === 0 && ( +
+
+
+ S H A D O W B R O K E R +
+

+ Real-time OSINT dashboard aggregating 12+ live intelligence sources. + Flights, ships, satellites, earthquakes, conflicts, and more — all on one map. +

+
+ +
+
+ +
+

API Keys Required

+

+ Two API keys are needed for full functionality: OpenSky Network (flights) and AIS Stream (ships). + Both are free. Without them, some panels will show no data. +

+
+
+
+ +
+
+ +
+

8 Sources Work Immediately

+

+ Military aircraft, satellites, earthquakes, global conflicts, weather radar, radio scanners, news, and market data all work out of the box — no keys needed. +

+
+
+
+
+ )} + + {step === 1 && ( +
+ {API_GUIDES.map((api) => ( +
+
+
+ {api.icon} + {api.name} + REQUIRED +
+ + GET KEY + +
+

{api.description}

+
    + {api.steps.map((s, i) => ( +
  1. + {i + 1}. + {s} +
  2. + ))} +
+
+ ))} + + +
+ )} + + {step === 2 && ( +
+

+ These data sources are completely free and require no API keys. They activate automatically on launch. +

+
+ {FREE_SOURCES.map((src) => ( +
+
+ {src.icon} + {src.name} +
+

{src.desc}

+
+ ))} +
+
+ )} +
+ + {/* Footer */} +
+ + +
+ {[0, 1, 2].map((i) => ( +
+ ))} +
+ + {step < 2 ? ( + + ) : ( + + )} +
+
+ + + ); +}); + +export function useOnboarding() { + const [showOnboarding, setShowOnboarding] = useState(false); + + useEffect(() => { + const done = localStorage.getItem(STORAGE_KEY); + if (!done) { + setShowOnboarding(true); + } + }, []); + + return { showOnboarding, setShowOnboarding }; +} + +export default OnboardingModal; diff --git a/frontend/src/components/SettingsPanel.tsx b/frontend/src/components/SettingsPanel.tsx index be50d5a..edca6a7 100644 --- a/frontend/src/components/SettingsPanel.tsx +++ b/frontend/src/components/SettingsPanel.tsx @@ -3,7 +3,7 @@ import { API_BASE } from "@/lib/api"; import React, { useState, useEffect, useCallback } from "react"; import { motion, AnimatePresence } from "framer-motion"; -import { Settings, Eye, EyeOff, Copy, Check, ExternalLink, Key, Shield, X, Save, ChevronDown, ChevronUp } from "lucide-react"; +import { Settings, ExternalLink, Key, Shield, X, Save, ChevronDown, ChevronUp } from "lucide-react"; interface ApiEntry { id: string; @@ -15,7 +15,7 @@ interface ApiEntry { has_key: boolean; env_key: string | null; value_obfuscated: string | null; - value_plain: string | null; + is_set: boolean; } // Category colors for the tactical UI @@ -33,8 +33,6 @@ const CATEGORY_COLORS: Record = { const SettingsPanel = React.memo(function SettingsPanel({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) { const [apis, setApis] = useState([]); - const [revealedKeys, setRevealedKeys] = useState>(new Set()); - const [copiedId, setCopiedId] = useState(null); const [editingId, setEditingId] = useState(null); const [editValue, setEditValue] = useState(""); const [saving, setSaving] = useState(false); @@ -56,28 +54,9 @@ const SettingsPanel = React.memo(function SettingsPanel({ isOpen, onClose }: { i if (isOpen) fetchKeys(); }, [isOpen, fetchKeys]); - const toggleReveal = (id: string) => { - setRevealedKeys(prev => { - const next = new Set(prev); - if (next.has(id)) next.delete(id); - else next.add(id); - return next; - }); - }; - - const copyToClipboard = async (id: string, value: string) => { - try { - await navigator.clipboard.writeText(value); - setCopiedId(id); - setTimeout(() => setCopiedId(null), 2000); - } catch { - // Clipboard API may fail in some contexts - } - }; - const startEditing = (api: ApiEntry) => { setEditingId(api.id); - setEditValue(api.value_plain || ""); + setEditValue(""); }; const saveKey = async (api: ApiEntry) => { @@ -209,9 +188,15 @@ const SettingsPanel = React.memo(function SettingsPanel({ isOpen, onClose }: { i
{api.has_key ? ( - - KEY SET - + api.is_set ? ( + + KEY SET + + ) : ( + + MISSING + + ) ) : ( PUBLIC @@ -272,34 +257,10 @@ const SettingsPanel = React.memo(function SettingsPanel({ isOpen, onClose }: { i className="flex-1 bg-black/40 border border-gray-800 rounded px-2.5 py-1.5 font-mono text-[11px] cursor-pointer hover:border-gray-700 transition-colors select-none" onClick={() => startEditing(api)} > - - {revealedKeys.has(api.id) ? api.value_plain : api.value_obfuscated} + + {api.is_set ? api.value_obfuscated : "Click to set key..."}
- - {/* Eye Toggle */} - - - {/* Copy */} - )} diff --git a/jobs.json b/jobs.json new file mode 100644 index 0000000..2137dad --- /dev/null +++ b/jobs.json @@ -0,0 +1,5 @@ +{ + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run", + "status": "404" +} diff --git a/zip_repo.py b/zip_repo.py index 092864b..5b3b3bd 100644 --- a/zip_repo.py +++ b/zip_repo.py @@ -2,7 +2,7 @@ import os import zipfile def create_clean_zip(): - zip_name = 'ShadowBroker_v0.2.zip' + zip_name = 'ShadowBroker_v0.3.zip' exclude_dirs = {'.git', 'node_modules', 'venv', '.next', '__pycache__'} exclude_files = {zip_name, 'zip_repo.py', '.env', '.env.local'}