pax_global_header 0000666 0000000 0000000 00000000064 14642733434 0014524 g ustar 00root root 0000000 0000000 52 comment=cda65e3da5aa8211d7971c5e795671e94537b77a sherlock-0.15.0/ 0000775 0000000 0000000 00000000000 14642733434 0013421 5 ustar 00root root 0000000 0000000 sherlock-0.15.0/.dockerignore 0000664 0000000 0000000 00000000107 14642733434 0016073 0 ustar 00root root 0000000 0000000 .git/ .vscode/ screenshot/ tests/ *.txt !/requirements.txt venv/ devel/ sherlock-0.15.0/.editorconfig 0000664 0000000 0000000 00000000462 14642733434 0016100 0 ustar 00root root 0000000 0000000 root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true curly_bracket_next_line = false spaces_around_operators = true [*.{markdown,md}] trim_trailing_whitespace = false [*.py] indent_size = 4 quote_type = double sherlock-0.15.0/.github/ 0000775 0000000 0000000 00000000000 14642733434 0014761 5 ustar 00root root 0000000 0000000 sherlock-0.15.0/.github/CODEOWNERS 0000664 0000000 0000000 00000000575 14642733434 0016363 0 ustar 00root root 0000000 0000000 ### REPOSITORY /.github/CODEOWNERS @sdushantha /.github/FUNDING.yml @sdushantha /LICENSE @sdushantha ### PACKAGING # Changes made to these items without code owner approval may negatively # impact packaging pipelines. /pyproject.toml @ppfeister @sdushantha ### REGRESSION /.github/workflows/regression.yml @ppfeister /tox.ini @ppfeister /pytest.ini @ppfeister /tests/ @ppfeister sherlock-0.15.0/.github/FUNDING.yml 0000664 0000000 0000000 00000000063 14642733434 0016575 0 ustar 00root root 0000000 0000000 github: [ sdushantha, ppfeister, matheusfelipeog ] sherlock-0.15.0/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 14642733434 0017144 5 ustar 00root root 0000000 0000000 sherlock-0.15.0/.github/ISSUE_TEMPLATE/bug-report.yml 0000664 0000000 0000000 00000004064 14642733434 0021761 0 ustar 00root root 0000000 0000000 name: Bug report description: File a bug report labels: ["bug"] body: - type: dropdown id: package attributes: label: Installation method description: | Some packages are maintained by the community, rather than by the Sherlock Project. Knowing which packages are affected helps us diagnose package-specific bugs. options: - Select one - PyPI (via pip) - Homebrew - Docker - Kali repository (via apt) - Built from source - Other (indicate below) validations: required: true - type: textarea id: description attributes: label: Description description: | Detailed descriptions that help contributors understand and reproduce your bug are much more likely to lead to a fix. Please include the following information: - What you were trying to do - What you expected to happen - What actually happened placeholder: | When doing {action}, the expected result should be {expected result}. When doing {action}, however, the actual result was {actual result}. This is undesirable because {reason}. validations: required: true - type: textarea id: steps-to-reproduce attributes: label: Steps to reproduce description: Write a step by step list that will allow us to reproduce this bug. placeholder: | 1. Do something 2. Then do something else validations: required: true - type: textarea id: additional-info attributes: label: Additional information description: If you have some additional information, please write it here. validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.15.0/.github/ISSUE_TEMPLATE/config.yml 0000664 0000000 0000000 00000000034 14642733434 0021131 0 ustar 00root root 0000000 0000000 blank_issues_enabled: false sherlock-0.15.0/.github/ISSUE_TEMPLATE/false-negative.yml 0000664 0000000 0000000 00000002071 14642733434 0022561 0 ustar 00root root 0000000 0000000 name: False negative description: Report a site that is returning false negative results title: "False negative for: " labels: ["false negative"] body: - type: markdown attributes: value: | Please include the site name in the title of your issue. Submit **one site per report** for faster resolution. If you have multiple sites in the same report, it often takes longer to fix. - type: textarea id: additional-info attributes: label: Additional info description: If you know why the site is returning false negatives, or noticed any patterns, please explain. placeholder: | Reddit is returning false negatives because... validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.15.0/.github/ISSUE_TEMPLATE/false-positive.yml 0000664 0000000 0000000 00000002160 14642733434 0022620 0 ustar 00root root 0000000 0000000 name: False positive description: Report a site that is returning false positive results title: "False positive for: " labels: ["false positive"] body: - type: markdown attributes: value: | Please include the site name in the title of your issue. Submit **one site per report** for faster resolution. If you have multiple sites in the same report, it often takes longer to fix. - type: textarea id: additional-info attributes: label: Additional info description: If you know why the site is returning false positives, or noticed any patterns, please explain. placeholder: | Reddit is returning false positives because... False positives only occur after x searches... validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.15.0/.github/ISSUE_TEMPLATE/feature-request.yml 0000664 0000000 0000000 00000001507 14642733434 0023013 0 ustar 00root root 0000000 0000000 name: Feature request description: Request a feature or enhancement labels: ["enhancement"] body: - type: markdown attributes: value: | Concise and thoughtful titles help other contributors find and add your requested feature. - type: textarea id: description attributes: label: Description description: Describe the feature you are requesting placeholder: I'd like Sherlock to be able to do xyz validations: required: true - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.15.0/.github/ISSUE_TEMPLATE/site-request.yml 0000664 0000000 0000000 00000002501 14642733434 0022317 0 ustar 00root root 0000000 0000000 name: Reuest a new website description: Request that Sherlock add support for a new website title: "Requesting support for: " labels: ["site support request"] body: - type: markdown attributes: value: | Ensure that the site name is in the title of your request. Requests without this information will be **closed**. - type: input id: site-url attributes: label: Site URL description: | What is the URL of the website indicated in your title? Websites sometimes have similar names. This helps constributors find the correct site. placeholder: https://reddit.com validations: required: true - type: textarea id: additional-info attributes: label: Additional info description: If you have suggestions on how Sherlock should detect for usernames, please explain below placeholder: Sherlock can detect if a username exists on Reddit by checking for... validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.15.0/.github/SECURITY.md 0000664 0000000 0000000 00000000716 14642733434 0016556 0 ustar 00root root 0000000 0000000 ## Security Policy ### Supported Versions Sherlock is a forward looking project. Only the latest and most current version is supported. ### Reporting a Vulnerability Security concerns can be submitted [__here__][report-url] without risk of exposing sensitive information. For issues that are low severity or unlikely to see exploitation, public issues are often acceptable. [report-url]: https://github.com/sherlock-project/sherlock/security/advisories/new sherlock-0.15.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14642733434 0017016 5 ustar 00root root 0000000 0000000 sherlock-0.15.0/.github/workflows/regression.yml 0000664 0000000 0000000 00000003271 14642733434 0021724 0 ustar 00root root 0000000 0000000 name: Regression Testing on: pull_request: branches: - master - release/** paths: - '.github/workflows/regression.yml' - '**/*.json' - '**/*.py' - '**/*.ini' - '**/*.toml' push: branches: - master - release/** paths: - '.github/workflows/regression.yml' - '**/*.json' - '**/*.py' - '**/*.ini' - '**/*.toml' jobs: tox-lint: # Linting is ran through tox to ensure that the same linter is used by local runners runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up linting environment uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install tox and related dependencies run: | python -m pip install --upgrade pip pip install tox - name: Run tox linting environment run: tox -e lint tox-matrix: runs-on: ${{ matrix.os }} strategy: fail-fast: false # We want to know what specicic versions it fails on matrix: os: [ ubuntu-latest, windows-latest, macos-latest, ] python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12', ] steps: - uses: actions/checkout@v4 - name: Set up environment ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install tox and related dependencies run: | python -m pip install --upgrade pip pip install tox pip install tox-gh-actions - name: Run tox run: tox sherlock-0.15.0/.github/workflows/update-site-list.yml 0000664 0000000 0000000 00000002614 14642733434 0022741 0 ustar 00root root 0000000 0000000 name: Update Site List # Trigger the workflow when changes are pushed to the main branch # and the changes include the sherlock_project/resources/data.json file on: push: branches: - master paths: - sherlock_project/resources/data.json jobs: sync-json-data: # Use the latest version of Ubuntu as the runner environment runs-on: ubuntu-latest steps: # Check out the code at the specified pull request head commit - name: Checkout code uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 # Install Python 3 - name: Install Python uses: actions/setup-python@v5 with: python-version: '3.x' # Execute the site_list.py Python script - name: Execute site-list.py run: python devel/site-list.py - name: Pushes to another repository uses: sdushantha/github-action-push-to-another-repository@main env: SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} with: source-directory: 'output' destination-github-username: 'sherlock-project' commit-message: 'Updated site list' destination-repository-name: 'sherlockproject.xyz' user-email: siddharth.dushantha@gmail.com target-branch: master sherlock-0.15.0/.gitignore 0000664 0000000 0000000 00000001007 14642733434 0015407 0 ustar 00root root 0000000 0000000 # Virtual Environments venv/ bin/ lib/ pyvenv.cfg poetry.lock # Regression Testing .coverage .tox/ # Editor Configurations .vscode/ .idea/ # Python __pycache__/ # Pip src/ # Devel, Build, and Installation *.egg-info/ dist/** # Jupyter Notebook .ipynb_checkpoints *.ipynb # Output files, except requirements.txt *.txt !requirements.txt # Comma-Separated Values (CSV) Reports *.csv #XLSX Reports *.xlsx # Excluded sites list tests/.excluded_sites # MacOS Folder Metadata File .DS_Store # Vim swap files *.swp sherlock-0.15.0/Dockerfile 0000664 0000000 0000000 00000001735 14642733434 0015421 0 ustar 00root root 0000000 0000000 # Release instructions: # 1. Update the version tag in the Dockerfile to match the version in sherlock/__init__.py # 2. Update the VCS_REF tag to match the tagged version's FULL commit hash # 3. Build image with BOTH latest and version tags # i.e. `docker build -t sherlock/sherlock:0.15.0 -t sherlock/sherlock:latest .` FROM python:3.12-slim-bullseye as build WORKDIR /sherlock RUN apt-get update \ pip3 install --no-cache-dir --upgrade pip FROM python:3.12-slim-bullseye WORKDIR /sherlock ARG VCS_REF= # CHANGE ME ON UPDATE ARG VCS_URL="https://github.com/sherlock-project/sherlock" ARG VERSION_TAG= # CHANGE ME ON UPDATE ENV SHERLOCK_ENV=docker LABEL org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.vcs-url=$VCS_URL \ org.label-schema.name="Sherlock" \ org.label-schema.version=$VERSION_TAG \ website="https://sherlockproject.xyz" RUN pip3 install --no-cache-dir sherlock-project==$VERSION_TAG WORKDIR /sherlock ENTRYPOINT ["sherlock"] sherlock-0.15.0/LICENSE 0000664 0000000 0000000 00000002061 14642733434 0014425 0 ustar 00root root 0000000 0000000 MIT License Copyright (c) 2019 Sherlock Project Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. sherlock-0.15.0/devel/ 0000775 0000000 0000000 00000000000 14642733434 0014520 5 ustar 00root root 0000000 0000000 sherlock-0.15.0/devel/site-list.py 0000664 0000000 0000000 00000002612 14642733434 0017010 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python # This module generates the listing of supported sites which can be found in # sites.md. It also organizes all the sites in alphanumeric order import json import os # Read the data.json file with open("sherlock/resources/data.json", "r", encoding="utf-8") as data_file: data: dict = json.load(data_file) # Removes schema-specific keywords for proper processing social_networks: dict = dict(data) social_networks.pop('$schema', None) # Sort the social networks in alphanumeric order social_networks: list = sorted(social_networks.items()) # Make output dir where the site list will be written os.mkdir("output") # Write the list of supported sites to sites.md with open("output/sites.mdx", "w") as site_file: site_file.write("---\ntitle: 'List of supported sites'\nsidebarTitle: 'Supported sites'\nicon: 'globe'\ndescription: 'Sherlock currently supports **400+** sites'\n---\n\n") for social_network, info in social_networks: url_main = info["urlMain"] is_nsfw = "**(NSFW)**" if info.get("isNSFW") else "" site_file.write(f"1. [{social_network}]({url_main}) {is_nsfw}\n") # Overwrite the data.json file with sorted data with open("sherlock/resources/data.json", "w") as data_file: sorted_data = json.dumps(data, indent=2, sort_keys=True) data_file.write(sorted_data) data_file.write("\n") print("Finished updating supported site listing!") sherlock-0.15.0/docs/ 0000775 0000000 0000000 00000000000 14642733434 0014351 5 ustar 00root root 0000000 0000000 sherlock-0.15.0/docs/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000012555 14642733434 0017160 0 ustar 00root root 0000000 0000000 # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at yahya.arbabi@gmail.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations sherlock-0.15.0/docs/README.md 0000664 0000000 0000000 00000011551 14642733434 0015633 0 ustar 00root root 0000000 0000000
Hunt down social media accounts by username across 400+ social networks
Installation • Usage • Contributing
kmR!|:}GD]&v,sN]"xNjZVo5É^H'OM3`AÖM囯HgԳN/3s\K`&)FIM ]f7h/;;xVO5;mńB!; J vqBS4jn_-h"fipsA4Qȿ-6P,aD5a~qg=KG H`B|v8iXqKzZZC|嵷EP"urvњLt\?H0ֈ2L.\Om%P&"Hkhē=Du$oK"ŵuú7ic@p|2`$S BN5oNⵏ(gF0\o6x ͊0&@"~jawr%(k?s삉H2B3!?w!aʡ7T- `+W.g'wf,̞>UkqFUG'G}`:^sB!ߡ`7 k"OukWKMT0҇F:ڲI}9?ʞ];e3$!|_XM`"zifB3C'j- #2ir̩.۲K퐯t Z?4)h]VlڠӪ giZԪ[Ov.6nΫk0qڛokZ#jQg͘"7oHg ƻhrܝ^|Iݼa]`b9,oYBZ5v{j0AzFtf~}*5jבgj=/B\Ѵd1LK#\_g"[ s4jT:fmstzePr ݫwsfw(:>a_QLs(#u6ɓƫ'#@Z<!B!)C:vu.^8_H=M|W_b6*iM<]fl߲Ylj4lDm$ ˦E0fL5c]Bϑ3nN͙gAzBTHRn٤Ĵ?]Sv1QvjmƯkQbZgj++i,_؈tn)/t}YSQ'Oa`&LHlOc4%uqI"VN2aڬTmkU/K5_KB0=R7=4)MSô@N4!Qj 8h0e1c!eW_~8K01"8~}zɹ3g4Z`AypgO?K0 u~JMqfYҤ˔-'|[tv8[n}ik!a}ڿoboH"4g.F!/t}El2ȘQ?&֩&iɭڴ/>H6o\W&B!r7; uA[n7pȜriƌR0'yFwAA*G=,$T̚v4%LݡY۽z)5=4qo@N@҅4= A Ɉ7i!vzk,@.:j]0<=ǟC^ 4aN':4&@""[7oI LE07|N5>vDF47'Q0DiۋEDiQ ќ1ml\`tA<;M[Z#Ѹ>:sCU$y/?90aZDIZit0Mnx1K0-X43d)˗.FjD|O 1ὥ7Lj!qDb .qT.-URiٶFOT_T5RH/99gY# 9ɣ7F ֯[7o&q^SUdvȬu7R<_[]NrIuug$9gh,t4.v_xْe3]M}Ѕ3Hw@pv횦= l0vה')9~#m8*v}R`|ՊF=ia'ԓ"e9J]` VN0Oٙv(cvB!CLDl!B~b%B!e()LB5sM*#B!g f OvR !B! &!B!@$B!b(B!BB!BU`&1dvw[;0_^ś9dtʤDZ)#iB!_lEsH:)ب7yD 7oXTr-v_O.>/7u 2e0]~Ã$.:i!B!$ dWD*YK\sI\lKtx,}g\nܣl\\2:gVQ`#ȑy{%#3֕V2fH}ψfmiʙُxc*W)߭e=- M !3f;;;(LxdȐA3QQO|PxﮨL2M_8s^댙2w{QfcYĚ=O!B`&"HOnR :쐦\GAO#DHdK>`Bgϗe%SF *6Gr\3KvħZ9>#gO>57s)ڪxW'ˡYR%xML,GS'$5|Ԫ]Ol %W/?}_t,UZV[1GiѺ4mR= h@}e/~IN<%B(ɰ&g[S\E*k!>Jʁ-FOJzEGL眮RuYL^CwI0^KJvliJCFvm)ܤ]Ov4r,^{flqM@ҝsfє`+}a#~%d#J$ |$UՐ3ɷC|_'o^ 6ގ-vv=l69t ƤTY>fHh#4jTJqZuOr~M#+TJ|/7ڴ kx0a?f]Ӌ/ɠٳ2y8 g?ۜ>e1wF0 !@LFZ=WJV'f =tL9+SI[$&2F=zF{}*rmZwA]_r#%f]GcB%[ET_\,aWBǬΒFSQq3\qZbӈ[ToWO,'%`9웴3KZ$8 ֆ@<%Ƭ+SI LJnN]r479w|HSԻbD*գ$r5O8%si*0nBoKЙi8gHZ$dt$QaQrU]8gHÅf]CKDo㼸O2dcl]s6Posx(~>~z6>qv2PB Ž4~5T)H.Ըd2Nj