Full Code of acidicoala/UplayR2Unlocker for AI

master 375d505083e7 cached
25 files
38.7 KB
10.5k tokens
21 symbols
1 requests
Download .txt
Repository: acidicoala/UplayR2Unlocker
Branch: master
Commit: 375d505083e7
Files: 25
Total size: 38.7 KB

Directory structure:
gitextract_u6dmngb8/

├── .editorconfig
├── .github/
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── .gitmodules
├── .idea/
│   ├── .gitignore
│   ├── UplayR2Unlocker2.iml
│   ├── cmake.xml
│   ├── codeStyles/
│   │   ├── Project.xml
│   │   └── codeStyleConfig.xml
│   ├── inspectionProfiles/
│   │   └── Project_Default.xml
│   ├── modules.xml
│   └── vcs.xml
├── CMakeLists.txt
├── LICENSE.txt
├── README.md
├── build.ps1
├── res/
│   ├── UplayR2Unlocker.jsonc
│   └── extra_build_config.gen.h
├── src/
│   ├── main.cpp
│   ├── pch.hpp
│   ├── unlocker/
│   │   ├── unlocker.cpp
│   │   └── unlocker.hpp
│   └── upc/
│       ├── upc.cpp
│       └── upc.hpp
└── vcpkg.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
[*]
charset = utf-8
end_of_line = crlf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = false
ij_smart_tabs = false
ij_visual_guides = none
ij_wrap_on_typing = false

[.editorconfig]
ij_editorconfig_align_group_field_declarations = false
ij_editorconfig_space_after_colon = false
ij_editorconfig_space_after_comma = true
ij_editorconfig_space_before_colon = false
ij_editorconfig_space_before_comma = false
ij_editorconfig_spaces_around_assignment_operators = true

[{*.c,*.c++,*.cc,*.cp,*.cpp,*.cu,*.cuh,*.cxx,*.h,*.h++,*.hh,*.hp,*.hpp,*.hxx,*.i,*.icc,*.ii,*.inl,*.ino,*.ipp,*.m,*.mm,*.pch,*.tcc,*.tpp,version.gen.rc}]
ij_c_add_brief_tag = false
ij_c_add_getter_prefix = true
ij_c_add_setter_prefix = true
ij_c_align_dictionary_pair_values = false
ij_c_align_group_field_declarations = false
ij_c_align_init_list_in_columns = true
ij_c_align_multiline_array_initializer_expression = true
ij_c_align_multiline_assignment = true
ij_c_align_multiline_binary_operation = true
ij_c_align_multiline_chained_methods = false
ij_c_align_multiline_for = true
ij_c_align_multiline_ternary_operation = false
ij_c_array_initializer_comma_on_next_line = false
ij_c_array_initializer_new_line_after_left_brace = false
ij_c_array_initializer_right_brace_on_new_line = false
ij_c_array_initializer_wrap = normal
ij_c_assignment_wrap = off
ij_c_binary_operation_sign_on_next_line = false
ij_c_binary_operation_wrap = normal
ij_c_blank_lines_after_class_header = 0
ij_c_blank_lines_after_imports = 1
ij_c_blank_lines_around_class = 1
ij_c_blank_lines_around_field = 0
ij_c_blank_lines_around_field_in_interface = 0
ij_c_blank_lines_around_method = 1
ij_c_blank_lines_around_method_in_interface = 1
ij_c_blank_lines_around_namespace = 0
ij_c_blank_lines_around_properties_in_declaration = 0
ij_c_blank_lines_around_properties_in_interface = 0
ij_c_blank_lines_before_imports = 1
ij_c_blank_lines_before_method_body = 0
ij_c_block_brace_placement = end_of_line
ij_c_block_brace_style = end_of_line
ij_c_block_comment_at_first_column = true
ij_c_catch_on_new_line = false
ij_c_class_brace_style = end_of_line
ij_c_class_constructor_init_list_align_multiline = true
ij_c_class_constructor_init_list_comma_on_next_line = false
ij_c_class_constructor_init_list_new_line_after_colon = never
ij_c_class_constructor_init_list_new_line_before_colon = if_long
ij_c_class_constructor_init_list_wrap = normal
ij_c_copy_is_deep = false
ij_c_create_interface_for_categories = true
ij_c_declare_generated_methods = true
ij_c_description_include_member_names = true
ij_c_discharged_short_ternary_operator = false
ij_c_do_not_add_breaks = false
ij_c_do_while_brace_force = never
ij_c_else_on_new_line = false
ij_c_enum_constants_comma_on_next_line = false
ij_c_enum_constants_wrap = on_every_item
ij_c_for_brace_force = never
ij_c_for_statement_new_line_after_left_paren = false
ij_c_for_statement_right_paren_on_new_line = false
ij_c_for_statement_wrap = off
ij_c_function_brace_placement = end_of_line
ij_c_function_call_arguments_align_multiline = false
ij_c_function_call_arguments_align_multiline_pars = false
ij_c_function_call_arguments_comma_on_next_line = false
ij_c_function_call_arguments_new_line_after_lpar = false
ij_c_function_call_arguments_new_line_before_rpar = false
ij_c_function_call_arguments_wrap = normal
ij_c_function_non_top_after_return_type_wrap = normal
ij_c_function_parameters_align_multiline = true
ij_c_function_parameters_align_multiline_pars = false
ij_c_function_parameters_comma_on_next_line = false
ij_c_function_parameters_new_line_after_lpar = true
ij_c_function_parameters_new_line_before_rpar = true
ij_c_function_parameters_wrap = normal
ij_c_function_top_after_return_type_wrap = normal
ij_c_generate_additional_eq_operators = true
ij_c_generate_additional_rel_operators = true
ij_c_generate_class_constructor = true
ij_c_generate_comparison_operators_use_std_tie = false
ij_c_generate_instance_variables_for_properties = ask
ij_c_generate_operators_as_members = true
ij_c_header_guard_style_pattern = ${PROJECT_NAME}_${FILE_NAME}_${EXT}
ij_c_if_brace_force = never
ij_c_in_line_short_ternary_operator = true
ij_c_indent_block_comment = true
ij_c_indent_c_struct_members = 4
ij_c_indent_case_from_switch = true
ij_c_indent_class_members = 4
ij_c_indent_directive_as_code = false
ij_c_indent_implementation_members = 0
ij_c_indent_inside_code_block = 4
ij_c_indent_interface_members = 0
ij_c_indent_interface_members_except_ivars_block = false
ij_c_indent_namespace_members = 4
ij_c_indent_preprocessor_directive = 0
ij_c_indent_visibility_keywords = 0
ij_c_insert_override = true
ij_c_insert_virtual_with_override = false
ij_c_introduce_auto_vars = false
ij_c_introduce_const_params = false
ij_c_introduce_const_vars = false
ij_c_introduce_generate_property = false
ij_c_introduce_generate_synthesize = true
ij_c_introduce_globals_to_header = true
ij_c_introduce_prop_to_private_category = false
ij_c_introduce_static_consts = true
ij_c_introduce_use_ns_types = false
ij_c_ivars_prefix = _
ij_c_keep_blank_lines_before_end = 1
ij_c_keep_blank_lines_before_right_brace = 1
ij_c_keep_blank_lines_in_code = 1
ij_c_keep_blank_lines_in_declarations = 1
ij_c_keep_case_expressions_in_one_line = false
ij_c_keep_control_statement_in_one_line = true
ij_c_keep_directive_at_first_column = true
ij_c_keep_first_column_comment = true
ij_c_keep_line_breaks = true
ij_c_keep_nested_namespaces_in_one_line = false
ij_c_keep_simple_blocks_in_one_line = true
ij_c_keep_simple_methods_in_one_line = true
ij_c_keep_structures_in_one_line = true
ij_c_lambda_capture_list_align_multiline = false
ij_c_lambda_capture_list_align_multiline_bracket = false
ij_c_lambda_capture_list_comma_on_next_line = false
ij_c_lambda_capture_list_new_line_after_lbracket = false
ij_c_lambda_capture_list_new_line_before_rbracket = false
ij_c_lambda_capture_list_wrap = off
ij_c_line_comment_add_space = false
ij_c_line_comment_at_first_column = true
ij_c_method_brace_placement = end_of_line
ij_c_method_call_arguments_align_by_colons = true
ij_c_method_call_arguments_align_multiline = false
ij_c_method_call_arguments_special_dictionary_pairs_treatment = true
ij_c_method_call_arguments_wrap = off
ij_c_method_call_chain_wrap = off
ij_c_method_parameters_align_by_colons = true
ij_c_method_parameters_align_multiline = false
ij_c_method_parameters_wrap = off
ij_c_namespace_brace_placement = end_of_line
ij_c_parentheses_expression_new_line_after_left_paren = false
ij_c_parentheses_expression_right_paren_on_new_line = false
ij_c_place_assignment_sign_on_next_line = false
ij_c_property_nonatomic = true
ij_c_put_ivars_to_implementation = true
ij_c_refactor_compatibility_aliases_and_classes = true
ij_c_refactor_properties_and_ivars = true
ij_c_release_style = ivar
ij_c_retain_object_parameters_in_constructor = true
ij_c_semicolon_after_method_signature = false
ij_c_shift_operation_align_multiline = true
ij_c_shift_operation_wrap = normal
ij_c_show_non_virtual_functions = false
ij_c_space_after_colon = true
ij_c_space_after_colon_in_foreach = true
ij_c_space_after_colon_in_selector = false
ij_c_space_after_comma = true
ij_c_space_after_cup_in_blocks = false
ij_c_space_after_dictionary_literal_colon = true
ij_c_space_after_for_semicolon = true
ij_c_space_after_init_list_colon = true
ij_c_space_after_method_parameter_type_parentheses = false
ij_c_space_after_method_return_type_parentheses = false
ij_c_space_after_pointer_in_declaration = true
ij_c_space_after_quest = true
ij_c_space_after_reference_in_declaration = true
ij_c_space_after_reference_in_rvalue = false
ij_c_space_after_structures_rbrace = true
ij_c_space_after_superclass_colon = true
ij_c_space_after_type_cast = true
ij_c_space_after_visibility_sign_in_method_declaration = true
ij_c_space_before_autorelease_pool_lbrace = true
ij_c_space_before_catch_keyword = true
ij_c_space_before_catch_left_brace = true
ij_c_space_before_catch_parentheses = true
ij_c_space_before_category_parentheses = true
ij_c_space_before_chained_send_message = true
ij_c_space_before_class_left_brace = true
ij_c_space_before_colon = true
ij_c_space_before_colon_in_foreach = false
ij_c_space_before_comma = false
ij_c_space_before_dictionary_literal_colon = false
ij_c_space_before_do_left_brace = true
ij_c_space_before_else_keyword = true
ij_c_space_before_else_left_brace = true
ij_c_space_before_for_left_brace = true
ij_c_space_before_for_parentheses = true
ij_c_space_before_for_semicolon = false
ij_c_space_before_if_left_brace = true
ij_c_space_before_if_parentheses = true
ij_c_space_before_init_list = false
ij_c_space_before_init_list_colon = true
ij_c_space_before_method_call_parentheses = false
ij_c_space_before_method_left_brace = true
ij_c_space_before_method_parentheses = false
ij_c_space_before_namespace_lbrace = true
ij_c_space_before_pointer_in_declaration = false
ij_c_space_before_property_attributes_parentheses = false
ij_c_space_before_protocols_brackets = true
ij_c_space_before_quest = true
ij_c_space_before_reference_in_declaration = false
ij_c_space_before_superclass_colon = true
ij_c_space_before_switch_left_brace = true
ij_c_space_before_switch_parentheses = true
ij_c_space_before_template_call_lt = false
ij_c_space_before_template_declaration_lt = false
ij_c_space_before_try_left_brace = true
ij_c_space_before_while_keyword = true
ij_c_space_before_while_left_brace = true
ij_c_space_before_while_parentheses = true
ij_c_space_between_adjacent_brackets = false
ij_c_space_between_operator_and_punctuator = false
ij_c_space_within_empty_array_initializer_braces = false
ij_c_spaces_around_additive_operators = true
ij_c_spaces_around_assignment_operators = true
ij_c_spaces_around_bitwise_operators = true
ij_c_spaces_around_equality_operators = true
ij_c_spaces_around_lambda_arrow = true
ij_c_spaces_around_logical_operators = true
ij_c_spaces_around_multiplicative_operators = true
ij_c_spaces_around_pm_operators = false
ij_c_spaces_around_relational_operators = true
ij_c_spaces_around_shift_operators = true
ij_c_spaces_around_unary_operator = false
ij_c_spaces_within_array_initializer_braces = true
ij_c_spaces_within_braces = true
ij_c_spaces_within_brackets = false
ij_c_spaces_within_cast_parentheses = false
ij_c_spaces_within_catch_parentheses = false
ij_c_spaces_within_category_parentheses = false
ij_c_spaces_within_empty_braces = false
ij_c_spaces_within_empty_function_call_parentheses = false
ij_c_spaces_within_empty_function_declaration_parentheses = false
ij_c_spaces_within_empty_lambda_capture_list_bracket = false
ij_c_spaces_within_empty_template_call_ltgt = false
ij_c_spaces_within_empty_template_declaration_ltgt = false
ij_c_spaces_within_for_parentheses = false
ij_c_spaces_within_function_call_parentheses = false
ij_c_spaces_within_function_declaration_parentheses = false
ij_c_spaces_within_if_parentheses = false
ij_c_spaces_within_lambda_capture_list_bracket = false
ij_c_spaces_within_method_parameter_type_parentheses = false
ij_c_spaces_within_method_return_type_parentheses = false
ij_c_spaces_within_parentheses = false
ij_c_spaces_within_property_attributes_parentheses = false
ij_c_spaces_within_protocols_brackets = false
ij_c_spaces_within_send_message_brackets = false
ij_c_spaces_within_switch_parentheses = false
ij_c_spaces_within_template_call_ltgt = false
ij_c_spaces_within_template_declaration_ltgt = false
ij_c_spaces_within_template_double_gt = true
ij_c_spaces_within_while_parentheses = false
ij_c_special_else_if_treatment = true
ij_c_superclass_list_after_colon = never
ij_c_superclass_list_align_multiline = true
ij_c_superclass_list_before_colon = if_long
ij_c_superclass_list_comma_on_next_line = false
ij_c_superclass_list_wrap = on_every_item
ij_c_tag_prefix_of_block_comment = at
ij_c_tag_prefix_of_line_comment = back_slash
ij_c_template_call_arguments_align_multiline = false
ij_c_template_call_arguments_align_multiline_pars = false
ij_c_template_call_arguments_comma_on_next_line = false
ij_c_template_call_arguments_new_line_after_lt = false
ij_c_template_call_arguments_new_line_before_gt = false
ij_c_template_call_arguments_wrap = off
ij_c_template_declaration_function_body_indent = false
ij_c_template_declaration_function_wrap = split_into_lines
ij_c_template_declaration_struct_body_indent = false
ij_c_template_declaration_struct_wrap = split_into_lines
ij_c_template_parameters_align_multiline = false
ij_c_template_parameters_align_multiline_pars = false
ij_c_template_parameters_comma_on_next_line = false
ij_c_template_parameters_new_line_after_lt = false
ij_c_template_parameters_new_line_before_gt = false
ij_c_template_parameters_wrap = off
ij_c_ternary_operation_signs_on_next_line = true
ij_c_ternary_operation_wrap = normal
ij_c_type_qualifiers_placement = before
ij_c_use_modern_casts = true
ij_c_use_setters_in_constructor = true
ij_c_while_brace_force = never
ij_c_while_on_new_line = false
ij_c_wrap_property_declaration = off

[{*.cmake,CMakeLists.txt}]
ij_continuation_indent_size = 4
ij_cmake_align_multiline_parameters_in_calls = false
ij_cmake_force_commands_case = 2
ij_cmake_keep_blank_lines_in_code = 2
ij_cmake_space_before_for_parentheses = true
ij_cmake_space_before_if_parentheses = true
ij_cmake_space_before_method_call_parentheses = false
ij_cmake_space_before_method_parentheses = false
ij_cmake_space_before_while_parentheses = true
ij_cmake_spaces_within_for_parentheses = false
ij_cmake_spaces_within_if_parentheses = false
ij_cmake_spaces_within_method_call_parentheses = false
ij_cmake_spaces_within_method_parentheses = false
ij_cmake_spaces_within_while_parentheses = false

[{*.har,*.json,*.jsonc}]
indent_size = 2
ij_json_keep_blank_lines_in_code = 1
ij_json_keep_indents_on_empty_lines = false
ij_json_keep_line_breaks = true
ij_json_space_after_colon = true
ij_json_space_after_comma = true
ij_json_space_before_colon = true
ij_json_space_before_comma = false
ij_json_spaces_within_braces = false
ij_json_spaces_within_brackets = false
ij_json_wrap_long_lines = false

[{*.apinotes,*.yaml,*.yml,.clang-format,.clang-tidy,_clang-format}]
indent_size = 2


================================================
FILE: .github/workflows/ci.yml
================================================
name: Continuous Integration
on: push

jobs:
  ci:
    name: CI
    uses: acidicoala/KoalaBox/.github/workflows/build-and-package.yml@db2ee8fa2074b05f8d876f54e2a36486d0e69258
    permissions:
      contents: write
    with:
      modules: >-
        ["UplayR2Unlocker"]

      zip_command: >
        zip -j $ZIP_NAME
        artifacts/*/*.dll

      config: Debug


================================================
FILE: .gitignore
================================================
/build


================================================
FILE: .gitmodules
================================================
[submodule "vcpkg"]
	path = vcpkg
	url = https://github.com/microsoft/vcpkg.git
[submodule "KoalaBox"]
	path = KoalaBox
	url = https://acidicoala@github.com/acidicoala/KoalaBox.git


================================================
FILE: .idea/.gitignore
================================================
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
/misc.xml

================================================
FILE: .idea/UplayR2Unlocker2.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

================================================
FILE: .idea/cmake.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CMakeSharedSettings">
    <configurations>
      <configuration PROFILE_NAME="Debug [32]" ENABLED="true" GENERATION_DIR="build/32" CONFIG_NAME="Debug" TOOLCHAIN_NAME="Visual Studio 2022 [x86]" GENERATION_OPTIONS="-G &quot;Visual Studio 17 2022&quot; -A Win32">
        <ADDITIONAL_GENERATION_ENVIRONMENT>
          <envs>
            <env name="VERSION_SUFFIX" value="-debug" />
          </envs>
        </ADDITIONAL_GENERATION_ENVIRONMENT>
      </configuration>
      <configuration PROFILE_NAME="Debug [64]" ENABLED="true" GENERATION_DIR="build/64" CONFIG_NAME="Debug" TOOLCHAIN_NAME="Visual Studio 2022 [amd64]" GENERATION_OPTIONS="-G &quot;Visual Studio 17 2022&quot; -A x64">
        <ADDITIONAL_GENERATION_ENVIRONMENT>
          <envs>
            <env name="VERSION_SUFFIX" value="-debug" />
          </envs>
        </ADDITIONAL_GENERATION_ENVIRONMENT>
      </configuration>
      <configuration PROFILE_NAME="Release [64]" ENABLED="false" GENERATION_DIR="build/64" CONFIG_NAME="Release" TOOLCHAIN_NAME="Visual Studio 2022 [amd64]" GENERATION_OPTIONS="-G &quot;Visual Studio 17 2022&quot; -A x64" />
    </configurations>
  </component>
</project>

================================================
FILE: .idea/codeStyles/Project.xml
================================================
<component name="ProjectCodeStyleConfiguration">
  <code_scheme name="Project" version="173">
    <option name="AUTODETECT_INDENTS" value="false" />
    <option name="RIGHT_MARGIN" value="100" />
    <option name="SOFT_MARGINS" value="100" />
    <JSON>
      <option name="OBJECT_WRAPPING" value="1" />
      <option name="ARRAY_WRAPPING" value="1" />
    </JSON>
    <Objective-C>
      <option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true" />
      <option name="FUNCTION_PARAMETERS_NEW_LINE_AFTER_LPAR" value="true" />
      <option name="FUNCTION_PARAMETERS_NEW_LINE_BEFORE_RPAR" value="true" />
      <option name="FUNCTION_CALL_ARGUMENTS_ALIGN_MULTILINE" value="false" />
      <option name="SPACE_BEFORE_POINTER_IN_DECLARATION" value="false" />
      <option name="SPACE_AFTER_POINTER_IN_DECLARATION" value="true" />
      <option name="SPACE_BEFORE_REFERENCE_IN_DECLARATION" value="false" />
      <option name="SPACE_AFTER_REFERENCE_IN_DECLARATION" value="true" />
    </Objective-C>
    <Objective-C-extensions>
      <extensions>
        <pair source="c" header="h" fileNamingConvention="PASCAL_CASE" />
        <pair source="cpp" header="hpp" fileNamingConvention="SNAKE_CASE" />
      </extensions>
      <rules>
        <rule entity="NAMESPACE" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
        <rule entity="MACRO" visibility="ANY" specifier="ANY" prefix="" style="SCREAMING_SNAKE_CASE" suffix="" />
        <rule entity="CLASS" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
        <rule entity="STRUCT" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
        <rule entity="ENUM" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
        <rule entity="ENUMERATOR" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
        <rule entity="TYPEDEF" visibility="ANY" specifier="ANY" prefix="" style="NONE" suffix="" />
        <rule entity="UNION" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
        <rule entity="CLASS_MEMBER_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
        <rule entity="STRUCT_MEMBER_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
        <rule entity="CLASS_MEMBER_FIELD" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="" />
        <rule entity="STRUCT_MEMBER_FIELD" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="" />
        <rule entity="GLOBAL_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
        <rule entity="GLOBAL_VARIABLE" visibility="ANY" specifier="ANY" prefix="" style="SCREAMING_SNAKE_CASE" suffix="" />
        <rule entity="PARAMETER" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="" />
        <rule entity="LOCAL_VARIABLE" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="" />
      </rules>
    </Objective-C-extensions>
    <codeStyleSettings language="CMake">
      <indentOptions>
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
      </indentOptions>
    </codeStyleSettings>
    <codeStyleSettings language="JSON">
      <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
    </codeStyleSettings>
    <codeStyleSettings language="Markdown">
      <option name="RIGHT_MARGIN" value="999" />
      <indentOptions>
        <option name="INDENT_SIZE" value="2" />
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
        <option name="TAB_SIZE" value="2" />
      </indentOptions>
    </codeStyleSettings>
    <codeStyleSettings language="ObjectiveC">
      <option name="RIGHT_MARGIN" value="100" />
      <option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" />
      <option name="BLOCK_COMMENT_AT_FIRST_COLUMN" value="false" />
      <option name="LINE_COMMENT_ADD_SPACE" value="true" />
      <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
      <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
      <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
      <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="false" />
      <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
      <indentOptions>
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
      </indentOptions>
    </codeStyleSettings>
    <codeStyleSettings language="PowerShell">
      <option name="BRACE_STYLE" value="5" />
      <option name="CLASS_BRACE_STYLE" value="5" />
      <option name="METHOD_BRACE_STYLE" value="5" />
      <option name="ELSE_ON_NEW_LINE" value="false" />
      <option name="SPECIAL_ELSE_IF_TREATMENT" value="false" />
      <option name="KEEP_SIMPLE_BLOCKS_IN_ONE_LINE" value="true" />
      <option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="true" />
      <option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
    </codeStyleSettings>
  </code_scheme>
</component>

================================================
FILE: .idea/codeStyles/codeStyleConfig.xml
================================================
<component name="ProjectCodeStyleConfiguration">
  <state>
    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
  </state>
</component>

================================================
FILE: .idea/inspectionProfiles/Project_Default.xml
================================================
<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
    <inspection_tool class="OCUnusedIncludeDirective" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="OCUnusedMacro" enabled="false" level="WARNING" enabled_by_default="false" />
  </profile>
</component>

================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/.idea/UplayR2Unlocker.iml" filepath="$PROJECT_DIR$/.idea/UplayR2Unlocker.iml" />
      <module fileurl="file://$PROJECT_DIR$/.idea/UplayR2Unlocker2.iml" filepath="$PROJECT_DIR$/.idea/UplayR2Unlocker2.iml" />
    </modules>
  </component>
</project>

================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
    <mapping directory="$PROJECT_DIR$/KoalaBox" vcs="Git" />
    <mapping directory="$PROJECT_DIR$/vcpkg" vcs="Git" />
  </component>
</project>

================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.21)

include(KoalaBox/KoalaBox.cmake)

configure_globals(KoalaBox)

project(UplayR2Unlocker VERSION 3.0.1)

set_32_and_64(ORIGINAL_DLL upc_r2_loader upc_r2_loader64)
set_32_and_64(LEGACY_ORIGINAL_DLL uplay_r2_loader uplay_r2_loader64)

set_32_and_64(STORE_DLL uplay_r2 uplay_r264)

configure_version_resource("https://github.com/acidicoala/UplayR2Unlocker")

set_32_and_64(DLL_INPUT "${RES_DIR}/uplay_r2.dll" "${RES_DIR}/upc_r2_loader64.dll")
configure_exports_generator()
configure_linker_exports(
    false
    "${ORIGINAL_DLL}_o"
    ${DLL_INPUT}
    "${SRC_DIR}/upc"
    "${SRC_DIR}/upc/upc.cpp"
)

configure_build_config(extra_build_config)

configure_library(
    SHARED

    ${SRC_DIR}/unlocker/unlocker.cpp
    ${SRC_DIR}/upc/upc.cpp
    ${SRC_DIR}/main.cpp

    ${KOALABOX_SRC_DIR}/koalabox/dll_monitor/dll_monitor.cpp
    ${KOALABOX_SRC_DIR}/koalabox/hook/hook.cpp
    ${KOALABOX_SRC_DIR}/koalabox/loader/loader.cpp
    ${KOALABOX_SRC_DIR}/koalabox/file_logger/file_logger.cpp
    ${KOALABOX_SRC_DIR}/koalabox/util/util.cpp
    ${KOALABOX_SRC_DIR}/koalabox/win_util/win_util.cpp

    ${LINKER_EXPORTS}
)

configure_precompile_headers(${CMAKE_PROJECT_NAME} ${SRC_DIR}/pch.hpp)

configure_output_name(${ORIGINAL_DLL})

configure_include_directories()

configure_dependencies(${CMAKE_PROJECT_NAME} cpr PolyHook_2 nlohmann_json spdlog)


================================================
FILE: LICENSE.txt
================================================
Copyright (C) 2022 by acidicoala

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.


================================================
FILE: README.md
================================================
# 🐨 Uplay R2 Unlocker 🔓

Legit DLC Unlocker for Ubisoft Connect (R2)

### [Official forum topic]

For user-friendly description, consult the official forum thread. This document is meant for developers.

[Official forum topic]: https://cs.rin.ru/forum/viewtopic.php?f=10&t=111874

### 👋 Acknowledgements

Credit to Mr. Goldberg for the open source release of his Uplay R2 emulator.

This project makes use of the following open source projects:

- [C++ Requests](https://github.com/libcpr/cpr)
- [JSON for Modern C++](https://github.com/nlohmann/json)
- [PolyHook 2.0](https://github.com/stevemk14ebr/PolyHook_2_0)
- [spdlog](https://github.com/gabime/spdlog)

### 📄 License

This software is licensed under [Zero Clause BSD] license, terms of which are available in [LICENSE.txt]

[Zero Clause BSD]: https://choosealicense.com/licenses/0bsd/

[LICENSE.txt]: ./LICENSE.txt


================================================
FILE: build.ps1
================================================
Set-Location (Get-Item $PSScriptRoot)

. ./KoalaBox/build.ps1 @args

Build-Project


================================================
FILE: res/UplayR2Unlocker.jsonc
================================================
{
  "logging": false,
  "lang": "default",
  "auto_fetch": true,
  "dlcs": [],
  "items": [],
  "blacklist": []
}


================================================
FILE: res/extra_build_config.gen.h
================================================
#pragma once

#define ORIGINAL_DLL "${ORIGINAL_DLL}"
#define LEGACY_ORIGINAL_DLL "${LEGACY_ORIGINAL_DLL}"

#define STORE_DLL "${STORE_DLL}"


================================================
FILE: src/main.cpp
================================================
#include "unlocker/unlocker.hpp"

// This header will be populated at build time
#include <linker_exports.h>

EXTERN_C BOOL WINAPI DllMain(HMODULE module, DWORD reason, LPVOID) {
    if (reason == DLL_PROCESS_ATTACH) {
        unlocker::init(module);
    } else if (reason == DLL_PROCESS_DETACH) {
        unlocker::shutdown();
    }

    return TRUE;
}


================================================
FILE: src/pch.hpp
================================================
#pragma once

#include "koalabox/pch.hpp"

#include "3rd_party/cpr.hpp"
#include "3rd_party/json.hpp"
#include "3rd_party/polyhook2.hpp"

#include "koalabox/config_parser/config_parser.hpp"
#include "koalabox/dll_monitor/dll_monitor.hpp"
#include "koalabox/hook/hook.hpp"
#include "koalabox/loader/loader.hpp"
#include "koalabox/file_logger/file_logger.hpp"
#include "koalabox/util/util.hpp"
#include "koalabox/win_util/win_util.hpp"


================================================
FILE: src/unlocker/unlocker.cpp
================================================
#include "unlocker.hpp"
#include "upc/upc.hpp"

#include "koalabox/config_parser/config_parser.hpp"
#include "koalabox/loader/loader.hpp"
#include "koalabox/util/util.hpp"
#include "koalabox/win_util/win_util.hpp"

#include <build_config.h>

#define DETOUR(FUNC) \
    hook::detour(original_library, #FUNC, reinterpret_cast<FunctionPointer>(FUNC));

namespace unlocker {
    Config config = {}; // NOLINT(cert-err58-cpp)

    ProductID global_app_id = 0;

    HMODULE original_library = nullptr;

    bool is_hook_mode = false;

    void init(const HMODULE& self_module) {
        try {
            DisableThreadLibraryCalls(self_module);

            const auto self_directory = loader::get_module_dir(self_module);

            config = config_parser::parse<Config>(self_directory / PROJECT_NAME".jsonc", true);

            if (config.logging) {
                logger = file_logger::create(self_directory / PROJECT_NAME".log");
            }

            logger->info("🐨 {} 🔓 v{}", PROJECT_NAME, PROJECT_VERSION);

            const auto module_path = win_util::get_module_file_name(self_module);

            const auto is_not_original_dll = hook::is_hook_mode(self_module, ORIGINAL_DLL);
            const auto is_not_legacy_dll = hook::is_hook_mode(self_module, LEGACY_ORIGINAL_DLL);

            is_hook_mode = is_not_original_dll and is_not_legacy_dll;

            if (is_hook_mode) {
                logger->info("🪝 Detected hook mode");

                dll_monitor::init(STORE_DLL, [](const HMODULE& store_library) {
                    hook::init();

                    original_library = store_library;

                    DETOUR(UPC_Init)
                    DETOUR(UPC_InstallLanguageGet)
                    DETOUR(UPC_ProductListFree)
                    DETOUR(UPC_ProductListGet)

                    logger->info("Hooking complete");

                    dll_monitor::shutdown();
                });
            } else {
                logger->info("🔀 Detected proxy mode");

                original_library = loader::load_original_library(self_directory, ORIGINAL_DLL);
            }

            logger->info("🚀 Initialization complete");
        } catch (const Exception& ex) {
            util::panic(fmt::format("Initialization error: {}", ex.what()));
        }
    }

    void shutdown() {
        try {
            if (not is_hook_mode) {
                win_util::free_library(original_library);
            }

            logger->info("💀 Shutdown complete");
        } catch (const Exception& ex) {
            logger->error("Shutdown error: {}", ex.what());
        }
    }

}



================================================
FILE: src/unlocker/unlocker.hpp
================================================
#pragma once

#include "koalabox/koalabox.hpp"

namespace unlocker {
    using namespace koalabox;

    typedef uint32_t ProductID;

    struct Config {
        bool logging = false;
        String lang = "default";
        bool auto_fetch = true;
        Set<ProductID> dlcs;
        Set<ProductID> items;
        Set<ProductID> blacklist;

        NLOHMANN_DEFINE_TYPE_INTRUSIVE(Config, logging, lang, auto_fetch, dlcs, items, blacklist)
    };

    extern Config config;

    extern HMODULE original_library;

    extern ProductID global_app_id;

    extern bool is_hook_mode;

    void init(const HMODULE& loader_library);

    void post_init();

    void shutdown();

}


================================================
FILE: src/upc/upc.cpp
================================================
#include "upc.hpp"

#define GET_ORIGINAL_FUNCTION(FUNC) \
    static const auto FUNC##_o = hook::get_original_function( \
        unlocker::is_hook_mode, unlocker::original_library, #FUNC, FUNC \
    );


String Product::get_type_string() const {
    switch (type) {
        case ProductType::App:
            return "App";
        case ProductType::DLC:
            return "DLC";
        case ProductType::Item:
            return "Item";
        default:
            return "Unexpected Type";
    }
}

void add_config_products(Map<ProductID, Product>& products) {
    products.insert({ global_app_id, Product(global_app_id, ProductType::App) });

    for (const auto& dlc_id: config.dlcs) {
        products.insert({ dlc_id, Product(dlc_id, ProductType::DLC) });
    }

    for (const auto& item_id: config.items) {
        products.insert({ item_id, Product(item_id, ProductType::Item) });
    }
}

void add_fetched_products(Map<ProductID, Product>& products) {
    if (not config.auto_fetch) {
        return;
    }

    const auto res = cpr::Get(cpr::Url{
        "https://raw.githubusercontent.com/acidicoala/public-entitlements/main/ubisoft/v1/products.jsonc"
    });

    if (res.status_code == cpr::status::HTTP_OK) {
        try {
            const auto json = nlohmann::json::parse(res.text, nullptr, true, true);

            // iterate over keys to find the one that matches the game

            for (const auto&[key, game]: json.items()) {
                // Regex matching enables us to specify multiple IDs for the same game
                if (std::regex_match(std::to_string(global_app_id), std::regex(key))) {
                    const String name(game["name"]);

                    logger->info("Fetched products for game: '{}'", name);

                    for (const ProductID dlc: game["dlcs"]) {
                        logger->debug("  ID: {}, Type: DLC", dlc);

                        products.insert({ dlc, Product(dlc, ProductType::DLC) });
                    }

                    for (const ProductID item: game["items"]) {
                        logger->debug("  ID: {}, Type: Item", item);

                        products.insert({ item, Product(item, ProductType::Item) });
                    }

                    break;
                }
            }
        } catch (const std::exception& ex) {
            logger->error("Failed to parse fetched products: {}", ex.what());
        }
    } else {
        logger->error(
            "Failed to fetch product IDs. "
            "Status code: {}. Text: {}", res.status_code, res.text
        );
    }
}

void add_legit_products(Map<ProductID, Product>& products, const ProductList* legit_product_list) {
    logger->info("Original product list contains {} elements:", legit_product_list->length);

    Vector<Product*> missing_products;

    // Iterate over original product list to find missing items

    for (uint32_t i = 0; i < legit_product_list->length; i++) {
        const auto product = legit_product_list->data[i];

        logger->debug(
            "  ID: {}, Type: {}, Mystery1: {}, Mystery2: {}, Always0: {}, Always3: {}",
            product->app_id, (int) product->type, product->mystery1,
            product->mystery2, product->always_0, product->always_3
        );

        if (product->type == ProductType::App) {
            continue;
        }

        // Insert missing products into the global product list
        if (not products.contains(product->app_id)) {
            products.insert({ product->app_id, Product(*product) });

            missing_products.push_back(product);
        }
    }

    // Let the user know which legitimately owned products are missing
    if (not missing_products.empty()) {
        logger->warn("Some of the legitimately owned products are missing from the config:");

        for (const auto missing_product: missing_products) {
            logger->warn(
                "  ID: {}, Type: {}",
                missing_product->app_id,
                missing_product->get_type_string()
            );
        }
    }
}

Vector<Product> get_filtered_products(Map<ProductID, Product>& products) {
    Vector<Product> filtered_products;

    // Construct a filtered list for game that excludes blacklisted ids

    for (const auto&[id, product]: products) {
        const auto included = not config.blacklist.contains(id);

        if (included) {
            filtered_products.push_back(product);
        }

        logger->debug(
            "  {} ID: {}, Type: {}",
            included ? "✅" : "❌", id, product.get_type_string()
        );
    }

    return filtered_products;
}

ProductList* create_new_product_list(const Vector<Product>& filtered_products) {
    const auto product_list = new ProductList{
        .length = static_cast<uint32_t>(filtered_products.size()),
        .data = new Product* [filtered_products.size()]
    };

    for (size_t i = 0; i < filtered_products.size(); i++) {
        product_list->data[i] = new Product(filtered_products.at(i));
    }

    return product_list;
}

DLL_EXPORT(int) UPC_Init(unsigned int version, ProductID app_id) {
    logger->info("⚡ {} -> version: {}, app_id: {}", __func__, version, app_id);

    global_app_id = app_id;

    GET_ORIGINAL_FUNCTION(UPC_Init)

    const auto result = UPC_Init_o(version, app_id);

    logger->debug("{} result: {}", __func__, result);

    return result;
}

DLL_EXPORT(int) UPC_ProductListFree(void*, ProductList* inProductList) {
    logger->debug(__func__);

    if (inProductList) {
        for (uint32_t i = 0; i < inProductList->length; i++) {
            delete inProductList->data[i];
        }

        delete[] inProductList->data;
    }

    delete inProductList;

    return 0;
}

DLL_EXPORT(int) UPC_ProductListGet(
    void* context,
    const char* inOptUserIdUtf8,
    unsigned int inFilter,
    ProductList** outProductList,
    UplayCallback inCallback,
    void* inCallbackData
) {
    logger->debug(__func__);

    const auto callbackContainer = new CallbackContainer{
        .context = context,
        .original_callback = inCallback,
        .in_callback_data = inCallbackData,
        .out_product_list = outProductList,
    };

    static const auto callback = [](unsigned long arg1, void* data) {
        logger->debug("UPC_ProductListGet callback -> arg1: {}", arg1);

        const auto container = static_cast<CallbackContainer*>(data);

        Map<ProductID, Product> products;

        add_config_products(products);
        add_fetched_products(products);
        add_legit_products(products, container->legit_product_list);

        logger->info("🍀 Unlocker prepared {} products:", products.size());

        const auto filtered_products = get_filtered_products(products);

        const auto product_list = create_new_product_list(filtered_products);

        // Save the product list address in the pointer provided by game earlier
        *(container->out_product_list) = product_list;

        // Let the game know that the product list is ready
        container->original_callback(arg1, container->in_callback_data);

        // Free the legit product list
        GET_ORIGINAL_FUNCTION(UPC_ProductListFree)
        UPC_ProductListFree_o(container->context, container->legit_product_list);

        delete container;
    };

    GET_ORIGINAL_FUNCTION(UPC_ProductListGet)

    return UPC_ProductListGet_o(
        context,
        inOptUserIdUtf8,
        inFilter,
        &callbackContainer->legit_product_list,
        callback,
        callbackContainer
    );
}

DLL_EXPORT(const char*) UPC_InstallLanguageGet(void* context) {
    logger->debug(__func__);

    if (config.lang == "default") {
        GET_ORIGINAL_FUNCTION(UPC_InstallLanguageGet)
        const auto result = UPC_InstallLanguageGet_o(context);

        logger->info("🔤 Responding with original language -> '{}'", result);

        return result;
    } else {
        logger->info("🔤 Responding with configured language -> '{}'", config.lang);

        return config.lang.c_str();
    }
}


================================================
FILE: src/upc/upc.hpp
================================================
#pragma once

#include "unlocker/unlocker.hpp"

#define DLL_EXPORT(TYPE) extern "C" _declspec(dllexport) TYPE

using namespace unlocker;

enum class ProductType {
    App = 1,
    DLC = 2,
    Item = 4,
};

struct Product {
    uint32_t app_id;

    ProductType type;
    [[maybe_unused]] uint32_t mystery1;
    [[maybe_unused]] uint32_t always_3 = 3;
    [[maybe_unused]] uint32_t always_0 = 0;
    [[maybe_unused]] uint32_t mystery2;

    Product(uint32_t app_id, ProductType type) {
        this->app_id = app_id;
        this->type = type;
        this->mystery1 = type == ProductType::Item ? 4 : 1;
        this->mystery2 = type == ProductType::Item ? 1 : 3;
    }

    [[nodiscard]]
    String get_type_string() const;
};

struct ProductList {
    uint32_t length = 0;
    [[maybe_unused]] uint32_t padding = 0; // What is this? offset?
    Product** data = nullptr; // Array of pointers
};

typedef void (* UplayCallback)(unsigned long, void*);

struct CallbackContainer {
    void* context = nullptr;
    UplayCallback original_callback = nullptr;
    void* in_callback_data = nullptr;
    ProductList* legit_product_list = nullptr;
    ProductList** out_product_list = nullptr;
};

DLL_EXPORT(int) UPC_Init(unsigned int version, ProductID app_id);

DLL_EXPORT(const char*) UPC_InstallLanguageGet(void* context);

DLL_EXPORT(int) UPC_ProductListFree(void* context, ProductList* inProductList);

DLL_EXPORT(int) UPC_ProductListGet(
    void* context,
    const char* inOptUserIdUtf8,
    unsigned int inFilter,
    ProductList** outProductList,
    UplayCallback inCallback,
    void* inCallbackData
);

================================================
FILE: vcpkg.json
================================================
{
  "name": "uplay-r2-unlocker",
  "version": "0.0.0",
  "license": "0BSD",
  "dependencies": [
    "cpr",
    "nlohmann-json",
    "polyhook2",
    "spdlog"
  ]
}
Download .txt
gitextract_u6dmngb8/

├── .editorconfig
├── .github/
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── .gitmodules
├── .idea/
│   ├── .gitignore
│   ├── UplayR2Unlocker2.iml
│   ├── cmake.xml
│   ├── codeStyles/
│   │   ├── Project.xml
│   │   └── codeStyleConfig.xml
│   ├── inspectionProfiles/
│   │   └── Project_Default.xml
│   ├── modules.xml
│   └── vcs.xml
├── CMakeLists.txt
├── LICENSE.txt
├── README.md
├── build.ps1
├── res/
│   ├── UplayR2Unlocker.jsonc
│   └── extra_build_config.gen.h
├── src/
│   ├── main.cpp
│   ├── pch.hpp
│   ├── unlocker/
│   │   ├── unlocker.cpp
│   │   └── unlocker.hpp
│   └── upc/
│       ├── upc.cpp
│       └── upc.hpp
└── vcpkg.json
Download .txt
SYMBOL INDEX (21 symbols across 5 files)

FILE: src/main.cpp
  function EXTERN_C (line 6) | EXTERN_C BOOL WINAPI DllMain(HMODULE module, DWORD reason, LPVOID) {

FILE: src/unlocker/unlocker.cpp
  type unlocker (line 14) | namespace unlocker {
    function init (line 23) | void init(const HMODULE& self_module) {
    function shutdown (line 73) | void shutdown() {

FILE: src/unlocker/unlocker.hpp
  type unlocker (line 5) | namespace unlocker {
    type Config (line 10) | struct Config {

FILE: src/upc/upc.cpp
  function String (line 9) | String Product::get_type_string() const {
  function add_config_products (line 22) | void add_config_products(Map<ProductID, Product>& products) {
  function add_fetched_products (line 34) | void add_fetched_products(Map<ProductID, Product>& products) {
  function add_legit_products (line 82) | void add_legit_products(Map<ProductID, Product>& products, const Product...
  function get_filtered_products (line 124) | Vector<Product> get_filtered_products(Map<ProductID, Product>& products) {
  function ProductList (line 145) | ProductList* create_new_product_list(const Vector<Product>& filtered_pro...
  function UPC_Init (line 158) | UPC_Init(unsigned int version, ProductID app_id) {
  function UPC_ProductListFree (line 172) | UPC_ProductListFree(void*, ProductList* inProductList) {
  function UPC_ProductListGet (line 188) | UPC_ProductListGet(
  function UPC_InstallLanguageGet (line 247) | UPC_InstallLanguageGet(void* context) {

FILE: src/upc/upc.hpp
  type ProductType (line 9) | enum class ProductType {
  type Product (line 15) | struct Product {
    method Product (line 24) | Product(uint32_t app_id, ProductType type) {
  type ProductList (line 35) | struct ProductList {
  type CallbackContainer (line 43) | struct CallbackContainer {
Condensed preview — 25 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (43K chars).
[
  {
    "path": ".editorconfig",
    "chars": 14232,
    "preview": "[*]\ncharset = utf-8\nend_of_line = crlf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\nmax_line_length "
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 364,
    "preview": "name: Continuous Integration\non: push\n\njobs:\n  ci:\n    name: CI\n    uses: acidicoala/KoalaBox/.github/workflows/build-an"
  },
  {
    "path": ".gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": ".gitmodules",
    "chars": 181,
    "preview": "[submodule \"vcpkg\"]\n\tpath = vcpkg\n\turl = https://github.com/microsoft/vcpkg.git\n[submodule \"KoalaBox\"]\n\tpath = KoalaBox\n"
  },
  {
    "path": ".idea/.gitignore",
    "chars": 107,
    "preview": "# Default ignored files\n/shelf/\n/workspace.xml\n# Editor-based HTTP Client requests\n/httpRequests/\n/misc.xml"
  },
  {
    "path": ".idea/UplayR2Unlocker2.iml",
    "chars": 97,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module classpath=\"CMake\" type=\"CPP_MODULE\" version=\"4\" />"
  },
  {
    "path": ".idea/cmake.xml",
    "chars": 1239,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CMakeSharedSettings\">\n    <configuration"
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "chars": 5009,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <option name=\"AUTODETE"
  },
  {
    "path": ".idea/codeStyles/codeStyleConfig.xml",
    "chars": 142,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <state>\n    <option name=\"USE_PER_PROJECT_SETTINGS\" value=\"true\" />\n "
  },
  {
    "path": ".idea/inspectionProfiles/Project_Default.xml",
    "chars": 376,
    "preview": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project De"
  },
  {
    "path": ".idea/modules.xml",
    "chars": 409,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n   "
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 299,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 1375,
    "preview": "cmake_minimum_required(VERSION 3.21)\n\ninclude(KoalaBox/KoalaBox.cmake)\n\nconfigure_globals(KoalaBox)\n\nproject(UplayR2Unlo"
  },
  {
    "path": "LICENSE.txt",
    "chars": 641,
    "preview": "Copyright (C) 2022 by acidicoala\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith "
  },
  {
    "path": "README.md",
    "chars": 874,
    "preview": "# 🐨 Uplay R2 Unlocker 🔓\n\nLegit DLC Unlocker for Ubisoft Connect (R2)\n\n### [Official forum topic]\n\nFor user-friendly des"
  },
  {
    "path": "build.ps1",
    "chars": 83,
    "preview": "Set-Location (Get-Item $PSScriptRoot)\n\n. ./KoalaBox/build.ps1 @args\n\nBuild-Project\n"
  },
  {
    "path": "res/UplayR2Unlocker.jsonc",
    "chars": 114,
    "preview": "{\n  \"logging\": false,\n  \"lang\": \"default\",\n  \"auto_fetch\": true,\n  \"dlcs\": [],\n  \"items\": [],\n  \"blacklist\": []\n}\n"
  },
  {
    "path": "res/extra_build_config.gen.h",
    "chars": 140,
    "preview": "#pragma once\n\n#define ORIGINAL_DLL \"${ORIGINAL_DLL}\"\n#define LEGACY_ORIGINAL_DLL \"${LEGACY_ORIGINAL_DLL}\"\n\n#define STORE"
  },
  {
    "path": "src/main.cpp",
    "chars": 354,
    "preview": "#include \"unlocker/unlocker.hpp\"\n\n// This header will be populated at build time\n#include <linker_exports.h>\n\nEXTERN_C B"
  },
  {
    "path": "src/pch.hpp",
    "chars": 434,
    "preview": "#pragma once\n\n#include \"koalabox/pch.hpp\"\n\n#include \"3rd_party/cpr.hpp\"\n#include \"3rd_party/json.hpp\"\n#include \"3rd_part"
  },
  {
    "path": "src/unlocker/unlocker.cpp",
    "chars": 2615,
    "preview": "#include \"unlocker.hpp\"\n#include \"upc/upc.hpp\"\n\n#include \"koalabox/config_parser/config_parser.hpp\"\n#include \"koalabox/l"
  },
  {
    "path": "src/unlocker/unlocker.hpp",
    "chars": 675,
    "preview": "#pragma once\n\n#include \"koalabox/koalabox.hpp\"\n\nnamespace unlocker {\n    using namespace koalabox;\n\n    typedef uint32_t"
  },
  {
    "path": "src/upc/upc.cpp",
    "chars": 8041,
    "preview": "#include \"upc.hpp\"\n\n#define GET_ORIGINAL_FUNCTION(FUNC) \\\n    static const auto FUNC##_o = hook::get_original_function( "
  },
  {
    "path": "src/upc/upc.hpp",
    "chars": 1609,
    "preview": "#pragma once\n\n#include \"unlocker/unlocker.hpp\"\n\n#define DLL_EXPORT(TYPE) extern \"C\" _declspec(dllexport) TYPE\n\nusing nam"
  },
  {
    "path": "vcpkg.json",
    "chars": 164,
    "preview": "{\n  \"name\": \"uplay-r2-unlocker\",\n  \"version\": \"0.0.0\",\n  \"license\": \"0BSD\",\n  \"dependencies\": [\n    \"cpr\",\n    \"nlohmann"
  }
]

About this extraction

This page contains the full source code of the acidicoala/UplayR2Unlocker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 25 files (38.7 KB), approximately 10.5k tokens, and a symbol index with 21 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!