├── .gitignore ├── AndroidManifest.xml ├── README.md ├── assets ├── MATERIAL_DASHBOARDV2_PREFERENCES.xml ├── com.aa.generaladaptiveapps_preferences.xml ├── com.ff.generaladaptiveapps_preferences.xml ├── myAppPrefs.xml ├── ninetyfour_playerPrefs.xml ├── ygohel18.zombieroadkill.1.xml └── ygohel18.zombieroadkill.2.xml ├── icon.png ├── info.json ├── java ├── com │ ├── chelpus │ │ ├── Common.java │ │ ├── GradientTextView.java │ │ ├── HttpRequest.java │ │ ├── Piper.java │ │ ├── SimpleXPath.java │ │ ├── Utils.java │ │ ├── XNodeException.java │ │ ├── XSupport.java │ │ └── root │ │ │ └── utils │ │ │ ├── AdsBlockOFF.java │ │ │ ├── AdsBlockON.java │ │ │ ├── ClearODEXfiles.java │ │ │ ├── SetCorePatch.java │ │ │ ├── SetCoreRestore.java │ │ │ ├── WriteSettingsXposed.java │ │ │ ├── backup.java │ │ │ ├── backupdata.java │ │ │ ├── checkDataSize.java │ │ │ ├── checkOdex.java │ │ │ ├── checkRoot.java │ │ │ ├── checkWithFramework.java │ │ │ ├── check_sd_from_root.java │ │ │ ├── clearDalvikCache.java │ │ │ ├── cleardata.java │ │ │ ├── cloneApp.java │ │ │ ├── copyFile.java │ │ │ ├── copyFileWithBackup.java │ │ │ ├── copyLibsFilesToSystemBackup.java │ │ │ ├── corecopy.java │ │ │ ├── corepatch.java │ │ │ ├── createapkcustom.java │ │ │ ├── createnerorunpatch.java │ │ │ ├── custompatch.java │ │ │ ├── deodex.java │ │ │ ├── install_to_system.java │ │ │ ├── integrate_dalvik_code.java │ │ │ ├── live_backup.java │ │ │ ├── live_backuplib.java │ │ │ ├── live_restore.java │ │ │ ├── live_restorelib.java │ │ │ ├── liverunpatch.java │ │ │ ├── liverunpatchlib.java │ │ │ ├── move_to_system.java │ │ │ ├── nerorunpatch.java │ │ │ ├── odex.java │ │ │ ├── odexSystemApps.java │ │ │ ├── odexrunpatch.java │ │ │ ├── optimizedex.java │ │ │ ├── pa.java │ │ │ ├── pa2.java │ │ │ ├── pinfo.java │ │ │ ├── remove.java │ │ │ ├── rename.java │ │ │ ├── restore.java │ │ │ ├── restoredata.java │ │ │ ├── reworkSuperSu.java │ │ │ ├── reworkhost.java │ │ │ ├── runpatch.java │ │ │ ├── runpatchads.java │ │ │ ├── runpatchsupport.java │ │ │ ├── runpatchsupportOld.java │ │ │ ├── testcore.java │ │ │ ├── transferSettings.java │ │ │ ├── uninstall.java │ │ │ └── unusedodex.java │ ├── google │ │ └── android │ │ │ └── finsky │ │ │ ├── billing │ │ │ └── iab │ │ │ │ ├── BuyActivity.java │ │ │ │ ├── BuyMarketActivity.java │ │ │ │ ├── DbHelper.java │ │ │ │ ├── InAppBillingFService.java │ │ │ │ ├── InAppBillingService.java │ │ │ │ ├── ItemsListItem.java │ │ │ │ ├── MarketBillingService.java │ │ │ │ └── google │ │ │ │ └── util │ │ │ │ ├── Base64.java │ │ │ │ ├── Base64DecoderException.java │ │ │ │ ├── IabException.java │ │ │ │ ├── IabHelper.java │ │ │ │ ├── IabResult.java │ │ │ │ ├── Inventory.java │ │ │ │ ├── Purchase.java │ │ │ │ ├── Security.java │ │ │ │ └── SkuDetails.java │ │ │ └── services │ │ │ └── LicensingService.java │ ├── googlecode │ │ └── dex2jar │ │ │ └── reader │ │ │ └── io │ │ │ ├── ArrayDataIn.java │ │ │ ├── DataIn.java │ │ │ ├── DataOut.java │ │ │ └── LeDataOut.java │ ├── mba │ │ └── proxylight │ │ │ ├── ProxyLight.java │ │ │ ├── Request.java │ │ │ ├── RequestFilter.java │ │ │ ├── RequestProcessor.java │ │ │ └── Socket.java │ └── proxoid │ │ ├── IProxoidControl.java │ │ ├── Proxoid.java │ │ └── ProxoidService.java ├── kellinwood │ ├── logging │ │ ├── AbstractLogger.java │ │ ├── ConsoleLoggerFactory.java │ │ ├── LoggerFactory.java │ │ ├── LoggerInterface.java │ │ ├── LoggerManager.java │ │ ├── NullLoggerFactory.java │ │ ├── StreamLogger.java │ │ ├── android │ │ │ ├── AndroidLogger.java │ │ │ └── AndroidLoggerFactory.java │ │ └── log4j │ │ │ ├── Log4jLogger.java │ │ │ └── Log4jLoggerFactory.java │ ├── security │ │ └── zipsigner │ │ │ ├── AutoKeyException.java │ │ │ ├── Base64.java │ │ │ ├── DefaultResourceAdapter.java │ │ │ ├── HexDumpEncoder.java │ │ │ ├── HexEncoder.java │ │ │ ├── KeySet.java │ │ │ ├── ProgressEvent.java │ │ │ ├── ProgressHelper.java │ │ │ ├── ProgressListener.java │ │ │ ├── ResourceAdapter.java │ │ │ ├── ZipSignature.java │ │ │ ├── ZipSigner.java │ │ │ └── optional │ │ │ ├── CertCreator.java │ │ │ ├── CustomKeySigner.java │ │ │ ├── DistinguishedNameValues.java │ │ │ ├── Fingerprint.java │ │ │ ├── JKS.java │ │ │ ├── JksKeyStore.java │ │ │ ├── KeyNameConflictException.java │ │ │ ├── KeyStoreFileManager.java │ │ │ ├── PasswordObfuscator.java │ │ │ └── SignatureBlockGenerator.java │ └── zipio │ │ ├── CentralEnd.java │ │ ├── ZioEntry.java │ │ ├── ZioEntryInputStream.java │ │ ├── ZioEntryOutputStream.java │ │ ├── ZipInput.java │ │ ├── ZipListingHelper.java │ │ └── ZipOutput.java ├── net │ └── lingala │ │ └── zip4j │ │ ├── core │ │ ├── HeaderReader.java │ │ ├── HeaderWriter.java │ │ └── ZipFile.java │ │ ├── crypto │ │ ├── AESDecrypter.java │ │ ├── AESEncrpyter.java │ │ ├── IDecrypter.java │ │ ├── IEncrypter.java │ │ ├── PBKDF2 │ │ │ ├── BinTools.java │ │ │ ├── MacBasedPRF.java │ │ │ ├── PBKDF2Engine.java │ │ │ ├── PBKDF2HexFormatter.java │ │ │ ├── PBKDF2Parameters.java │ │ │ └── PRF.java │ │ ├── StandardDecrypter.java │ │ ├── StandardEncrypter.java │ │ └── engine │ │ │ ├── AESEngine.java │ │ │ └── ZipCryptoEngine.java │ │ ├── exception │ │ ├── ZipException.java │ │ └── ZipExceptionConstants.java │ │ ├── io │ │ ├── BaseInputStream.java │ │ ├── BaseOutputStream.java │ │ ├── CipherOutputStream.java │ │ ├── DeflaterOutputStream.java │ │ ├── InflaterInputStream.java │ │ ├── PartInputStream.java │ │ ├── SplitOutputStream.java │ │ ├── ZipInputStream.java │ │ └── ZipOutputStream.java │ │ ├── model │ │ ├── AESExtraDataRecord.java │ │ ├── ArchiveExtraDataRecord.java │ │ ├── CentralDirectory.java │ │ ├── DataDescriptor.java │ │ ├── DigitalSignature.java │ │ ├── EndCentralDirRecord.java │ │ ├── ExtraDataRecord.java │ │ ├── FileHeader.java │ │ ├── LocalFileHeader.java │ │ ├── UnzipEngineParameters.java │ │ ├── UnzipParameters.java │ │ ├── Zip64EndCentralDirLocator.java │ │ ├── Zip64EndCentralDirRecord.java │ │ ├── Zip64ExtendedInfo.java │ │ ├── ZipModel.java │ │ └── ZipParameters.java │ │ ├── progress │ │ └── ProgressMonitor.java │ │ ├── unzip │ │ ├── Unzip.java │ │ ├── UnzipEngine.java │ │ └── UnzipUtil.java │ │ ├── util │ │ ├── ArchiveMaintainer.java │ │ ├── CRCUtil.java │ │ ├── InternalZipConstants.java │ │ ├── Raw.java │ │ ├── Zip4jConstants.java │ │ └── Zip4jUtil.java │ │ └── zip │ │ └── ZipEngine.java ├── org │ └── tukaani │ │ └── xz │ │ ├── ARMOptions.java │ │ ├── ARMThumbOptions.java │ │ ├── BCJCoder.java │ │ ├── BCJDecoder.java │ │ ├── BCJEncoder.java │ │ ├── BCJOptions.java │ │ ├── BlockInputStream.java │ │ ├── BlockOutputStream.java │ │ ├── CorruptedInputException.java │ │ ├── CountingInputStream.java │ │ ├── CountingOutputStream.java │ │ ├── DeltaCoder.java │ │ ├── DeltaDecoder.java │ │ ├── DeltaEncoder.java │ │ ├── DeltaInputStream.java │ │ ├── DeltaOptions.java │ │ ├── DeltaOutputStream.java │ │ ├── FilterCoder.java │ │ ├── FilterDecoder.java │ │ ├── FilterEncoder.java │ │ ├── FilterOptions.java │ │ ├── FinishableOutputStream.java │ │ ├── FinishableWrapperOutputStream.java │ │ ├── IA64Options.java │ │ ├── IndexIndicatorException.java │ │ ├── LZMA2Coder.java │ │ ├── LZMA2Decoder.java │ │ ├── LZMA2Encoder.java │ │ ├── LZMA2InputStream.java │ │ ├── LZMA2Options.java │ │ ├── LZMA2OutputStream.java │ │ ├── LZMAInputStream.java │ │ ├── MemoryLimitException.java │ │ ├── PowerPCOptions.java │ │ ├── RawCoder.java │ │ ├── SPARCOptions.java │ │ ├── SeekableFileInputStream.java │ │ ├── SeekableInputStream.java │ │ ├── SeekableXZInputStream.java │ │ ├── SimpleInputStream.java │ │ ├── SimpleOutputStream.java │ │ ├── SingleXZInputStream.java │ │ ├── UncompressedLZMA2OutputStream.java │ │ ├── UnsupportedOptionsException.java │ │ ├── X86Options.java │ │ ├── XZ.java │ │ ├── XZFormatException.java │ │ ├── XZIOException.java │ │ ├── XZInputStream.java │ │ ├── XZOutputStream.java │ │ ├── check │ │ ├── CRC32.java │ │ ├── CRC64.java │ │ ├── Check.java │ │ ├── None.java │ │ └── SHA256.java │ │ ├── common │ │ ├── DecoderUtil.java │ │ ├── EncoderUtil.java │ │ ├── StreamFlags.java │ │ └── Util.java │ │ ├── delta │ │ ├── DeltaCoder.java │ │ ├── DeltaDecoder.java │ │ └── DeltaEncoder.java │ │ ├── index │ │ ├── BlockInfo.java │ │ ├── IndexBase.java │ │ ├── IndexDecoder.java │ │ ├── IndexEncoder.java │ │ ├── IndexHash.java │ │ └── IndexRecord.java │ │ ├── lz │ │ ├── BT4.java │ │ ├── CRC32Hash.java │ │ ├── HC4.java │ │ ├── Hash234.java │ │ ├── LZDecoder.java │ │ ├── LZEncoder.java │ │ └── Matches.java │ │ ├── lzma │ │ ├── LZMACoder.java │ │ ├── LZMADecoder.java │ │ ├── LZMAEncoder.java │ │ ├── LZMAEncoderFast.java │ │ ├── LZMAEncoderNormal.java │ │ ├── Optimum.java │ │ └── State.java │ │ ├── package-info.java │ │ ├── rangecoder │ │ ├── RangeCoder.java │ │ ├── RangeDecoder.java │ │ ├── RangeDecoderFromBuffer.java │ │ ├── RangeDecoderFromStream.java │ │ └── RangeEncoder.java │ │ └── simple │ │ ├── ARM.java │ │ ├── ARMThumb.java │ │ ├── IA64.java │ │ ├── PowerPC.java │ │ ├── SPARC.java │ │ ├── SimpleFilter.java │ │ └── X86.java └── pxb │ └── android │ ├── ResConst.java │ ├── StringItem.java │ ├── StringItems.java │ ├── arsc │ ├── ArscDumper.java │ ├── ArscParser.java │ ├── ArscWriter.java │ ├── BagValue.java │ ├── Config.java │ ├── Pkg.java │ ├── ResEntry.java │ ├── ResSpec.java │ ├── Type.java │ └── Value.java │ ├── axml │ ├── Axml.java │ ├── AxmlParser.java │ ├── AxmlReader.java │ ├── AxmlVisitor.java │ ├── AxmlWriter.java │ ├── DumpAdapter.java │ ├── NodeVisitor.java │ ├── R.java │ ├── Util.java │ └── ValueWrapper.java │ └── axmlLP │ ├── Axml.java │ ├── AxmlReader.java │ ├── AxmlVisitor.java │ ├── AxmlWriter.java │ ├── DumpAdapter.java │ ├── EmptyAdapter.java │ ├── EnableDebugger.java │ ├── StringItem.java │ └── StringItems.java └── res ├── drawable-hdpi-v4 ├── android.png ├── auto.png ├── button_binder.xml ├── button_binder_focus.xml ├── button_binder_pressed.xml ├── button_clear.png ├── button_clear_press.png ├── cbutton.xml ├── checkbox_selector.xml ├── checkbox_selector_2.xml ├── clear.png ├── context_ads.png ├── context_backup.png ├── context_backup_data.png ├── context_create_apk.png ├── context_custom_patch.png ├── context_deodex.png ├── context_lvl.png ├── context_odex.png ├── context_patch_reboot.png ├── context_patcher.png ├── context_permissions.png ├── context_recycle.png ├── context_restore.png ├── context_share.png ├── faq.png ├── fb_back.png ├── fb_folder.png ├── file_icon.png ├── ic_angel.png ├── ic_bolen.png ├── ic_launcher.png ├── ic_notify.png ├── ic_progress_indicator.png ├── ic_vopros.png ├── ic_wait.png ├── info_app.png ├── klev.png ├── klev_down.png ├── menu.png ├── menu_back.png ├── move_to.png ├── rect_text_edit_transparent.xml ├── remove.png ├── rounded_corner.xml ├── run.png ├── settings.png ├── star.png ├── star_down.png ├── switch_off.png ├── switch_on.png ├── tab_bg_selected.xml ├── tab_bg_selector.xml ├── tab_bg_unselected.xml ├── tab_divider.9.png ├── tab_text_selector.xml ├── toggleswitch.xml ├── update.png └── widget_border.xml ├── drawable-ldpi-v4 ├── button_binder.xml ├── button_binder_focus.xml ├── button_binder_pressed.xml ├── cbutton.xml ├── ic_notify.png ├── rounded_corner.xml ├── tab_bg_selected.xml ├── tab_bg_selector.xml ├── tab_bg_unselected.xml ├── tab_text_selector.xml ├── toggleswitch.xml └── widget_border.xml ├── drawable-mdpi-v4 ├── button_binder.xml ├── button_binder_focus.xml ├── button_binder_pressed.xml ├── cbutton.xml ├── ic_launcher.png ├── ic_notify.png ├── ic_progress_indicator.png ├── rounded_corner.xml ├── tab_bg_selected.xml ├── tab_bg_selector.xml ├── tab_bg_unselected.xml ├── tab_text_selector.xml ├── toggleswitch.xml └── widget_border.xml ├── drawable-xhdpi-v4 ├── ic_launcher.png └── ic_progress_indicator.png ├── drawable-xxhdpi-v4 ├── ic_launcher.png └── ic_progress_indicator.png ├── drawable-xxxhdpi-v4 └── ic_launcher.png ├── drawable ├── background_alert.xml ├── background_gradient.xml ├── button_advanced.xml ├── button_advanced_press.xml ├── button_alert.xml ├── button_binder.xml ├── button_binder_focus.xml ├── button_binder_pressed.xml ├── button_panel.xml ├── cbutton.xml ├── cbutton_adv.xml ├── cbutton_clear.xml ├── custom_progress_bar_horizontal.xml ├── my_progress_indeterminate.xml ├── rect_text_edit.xml ├── rounded_corner.xml ├── tab_bg_selected.xml ├── tab_bg_selector.xml ├── tab_bg_unselected.xml ├── tab_text_selector.xml ├── toggleswitch.xml └── widget_border.xml ├── layout-v11 └── applicationdialog.xml ├── layout-v17 └── core_patch_result.xml ├── layout ├── aboutdialog.xml ├── activity_main.xml ├── advanced_filter.xml ├── alert_dialog.xml ├── android_patch_widget.xml ├── app_disabler_widget.xml ├── applicationdialog.xml ├── backup_context_menu.xml ├── binder.xml ├── binder_create_dir.xml ├── binder_file_browser.xml ├── binder_widget.xml ├── binderdialog.xml ├── binditemview.xml ├── bootlistitemview.xml ├── buy_dialog.xml ├── child_categoty_pref_view.xml ├── child_change_dir_pref_view.xml ├── child_day_on_up_pref_view.xml ├── child_icon_change_pref_view.xml ├── child_name_sheme_pref_view.xml ├── child_orientation_pref_view.xml ├── child_root_pref_view.xml ├── child_sort_pref_view.xml ├── child_text_size_pref_view.xml ├── child_view.xml ├── contextmenu.xml ├── core_patch_result.xml ├── corepatch.xml ├── corepatch_layout.xml ├── custom_title.xml ├── customdialog.xml ├── custompatchdialog.xml ├── extpatchdialog.xml ├── file_browser.xml ├── file_browser_row.xml ├── fragment_filter.xml ├── freespace.xml ├── gm_installer.xml ├── group_check_view.xml ├── group_view.xml ├── help.xml ├── icon_app_disabler_menu.xml ├── icon_context_menu.xml ├── livepatchdialog.xml ├── message.xml ├── patchdialog.xml ├── pkglistitemview.xml ├── pkglistitemview_no_icon.xml ├── pkglistviewlayout.xml ├── pkglistviewlayout_no_root.xml ├── progress_dialog.xml ├── purchases_for_delete.xml ├── selectpatch.xml ├── switchers_context_menu.xml ├── sys_dialog.xml ├── sys_dialog_ok.xml ├── tabs_bg.xml ├── widget_inapp.xml ├── widget_lvl.xml ├── widget_proxy_gp.xml └── xposedpatch.xml ├── menu └── mainmenu.xml ├── mipmap-hdpi-v4 ├── clone.png ├── ic_group_check_items.png ├── ic_group_checkable.png ├── ic_group_editable.png ├── ic_group_run.png ├── ic_group_selectable.png ├── ic_launcher2.png ├── ic_launcher3.png ├── ic_launcher4.png ├── ic_launcher5.png ├── ic_launcher6.png ├── ic_launcher7.png ├── ic_launcher8.png ├── vertical_switcher_off.png └── vertical_switcher_on.png ├── mipmap-mdpi-v4 ├── clone.png ├── ic_group_check_items.png ├── ic_group_checkable.png ├── ic_group_editable.png ├── ic_group_run.png ├── ic_group_selectable.png ├── ic_launcher2.png ├── ic_launcher3.png ├── ic_launcher4.png ├── ic_launcher5.png ├── ic_launcher6.png ├── ic_launcher7.png ├── ic_launcher8.png ├── vertical_switcher_off.png └── vertical_switcher_on.png ├── mipmap-xhdpi-v4 ├── clone.png ├── ic_group_check_items.png ├── ic_group_checkable.png ├── ic_group_editable.png ├── ic_group_run.png ├── ic_group_selectable.png ├── ic_launcher2.png ├── ic_launcher3.png ├── ic_launcher4.png ├── ic_launcher5.png ├── ic_launcher6.png ├── ic_launcher7.png ├── ic_launcher8.png ├── vertical_switcher_off.png └── vertical_switcher_on.png ├── mipmap-xxhdpi-v4 ├── clone.png ├── ic_group_check_items.png ├── ic_group_checkable.png ├── ic_group_editable.png ├── ic_group_run.png ├── ic_group_selectable.png ├── ic_launcher2.png ├── ic_launcher3.png ├── ic_launcher4.png ├── ic_launcher5.png ├── ic_launcher6.png ├── ic_launcher7.png ├── ic_launcher8.png ├── vertical_switcher_off.png └── vertical_switcher_on.png ├── mipmap-xxxhdpi-v4 ├── clone.png ├── ic_group_check_items.png ├── ic_group_checkable.png ├── ic_group_editable.png ├── ic_group_run.png ├── ic_group_selectable.png ├── ic_launcher2.png ├── ic_launcher3.png ├── ic_launcher4.png ├── ic_launcher5.png ├── ic_launcher6.png ├── ic_launcher7.png ├── ic_launcher8.png ├── vertical_switcher_off.png └── vertical_switcher_on.png ├── values-ar-rEG └── strings.xml ├── values-ar-rSY └── strings.xml ├── values-ar ├── raws.xml └── strings.xml ├── values-az ├── raws.xml └── strings.xml ├── values-be ├── raws.xml └── strings.xml ├── values-bg ├── raws.xml └── strings.xml ├── values-bn-rBD └── strings.xml ├── values-cs ├── raws.xml └── strings.xml ├── values-da ├── raws.xml └── strings.xml ├── values-de ├── raws.xml └── strings.xml ├── values-el └── strings.xml ├── values-es-rES ├── raws.xml └── strings.xml ├── values-es-rMX ├── raws.xml └── strings.xml ├── values-es ├── raws.xml └── strings.xml ├── values-fa ├── raws.xml └── strings.xml ├── values-fi ├── raws.xml └── strings.xml ├── values-fr └── strings.xml ├── values-gu ├── raws.xml └── strings.xml ├── values-he └── strings.xml ├── values-hi ├── raws.xml └── strings.xml ├── values-hr └── strings.xml ├── values-hu ├── raws.xml └── strings.xml ├── values-hy-rAM └── strings.xml ├── values-id ├── raws.xml └── strings.xml ├── values-in └── raws.xml ├── values-it └── strings.xml ├── values-iw └── strings.xml ├── values-ja └── strings.xml ├── values-km-rKH └── strings.xml ├── values-km └── strings.xml ├── values-ko ├── raws.xml └── strings.xml ├── values-ku └── strings.xml ├── values-lt ├── raws.xml └── strings.xml ├── values-lv └── strings.xml ├── values-ml └── strings.xml ├── values-my ├── raws.xml └── strings.xml ├── values-nl └── strings.xml ├── values-pl └── strings.xml ├── values-pt-rBR └── strings.xml ├── values-pt └── strings.xml ├── values-ro ├── raws.xml └── strings.xml ├── values-ru ├── raws.xml └── strings.xml ├── values-si └── strings.xml ├── values-sk ├── raws.xml └── strings.xml ├── values-sl └── strings.xml ├── values-sr └── strings.xml ├── values-th └── strings.xml ├── values-tl-rPH └── strings.xml ├── values-tr ├── raws.xml └── strings.xml ├── values-ug ├── raws.xml └── strings.xml ├── values-uk-rUA └── strings.xml ├── values-uk └── raws.xml ├── values-uz └── strings.xml ├── values-vi ├── raws.xml └── strings.xml ├── values-zh-rCN ├── raws.xml └── strings.xml ├── values-zh-rHK ├── raws.xml └── strings.xml ├── values-zh-rTW ├── raws.xml └── strings.xml ├── values ├── arrays.xml ├── colors.xml ├── dimens.xml ├── drawables.xml ├── menus.xml ├── raws.xml ├── strings.xml ├── styles.xml └── xmls.xml ├── xml-v11 ├── android_patch_widget_info.xml ├── app_disabler_widget.xml ├── binder_widget_info.xml ├── inapp_widget_provider.xml ├── lvl_widget_provider.xml └── proxy_gp_widget_provider.xml ├── xml-v12 ├── android_patch_widget_info.xml ├── app_disabler_widget.xml ├── binder_widget_info.xml ├── inapp_widget_provider.xml ├── lvl_widget_provider.xml └── proxy_gp_widget_provider.xml ├── xml-v17 ├── android_patch_widget_info.xml ├── app_disabler_widget.xml ├── binder_widget_info.xml ├── inapp_widget_provider.xml ├── lvl_widget_provider.xml └── proxy_gp_widget_provider.xml └── xml ├── android_patch_widget_info.xml ├── app_disabler_widget.xml ├── binder_widget_info.xml ├── inapp_widget_provider.xml ├── lvl_widget_provider.xml ├── preferences.xml └── proxy_gp_widget_provider.xml /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Mobile Tools for Java (J2ME) 4 | .mtj.tmp/ 5 | 6 | # Package Files # 7 | *.jar 8 | *.war 9 | *.ear 10 | 11 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 12 | hs_err_pid* 13 | -------------------------------------------------------------------------------- /assets/MATERIAL_DASHBOARDV2_PREFERENCES.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | none 12 | 13 | 14 | -------------------------------------------------------------------------------- /assets/com.aa.generaladaptiveapps_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | NO 4 | 5 | YES 6 | OFF 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/com.ff.generaladaptiveapps_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NO 5 | YES 6 | 7 | OFF 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/ninetyfour_playerPrefs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Profile_22 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/ygohel18.zombieroadkill.1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /assets/ygohel18.zombieroadkill.2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 5 | 6 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/icon.png -------------------------------------------------------------------------------- /info.json: -------------------------------------------------------------------------------- 1 | {"package_label":"Lucky Patcher","package_name":"com.android.vending.billing.InAppBillingService.LOCK","has_java_sources":true,"has_xml_sources":true} -------------------------------------------------------------------------------- /java/com/chelpus/GradientTextView.java: -------------------------------------------------------------------------------- 1 | package com.chelpus; 2 | 3 | import android.content.Context; 4 | import android.graphics.Color; 5 | import android.graphics.LinearGradient; 6 | import android.graphics.Shader.TileMode; 7 | import android.util.AttributeSet; 8 | import android.widget.TextView; 9 | 10 | public class GradientTextView extends TextView { 11 | public GradientTextView(Context context) { 12 | super(context, null, -1); 13 | } 14 | 15 | public GradientTextView(Context context, AttributeSet attrs) { 16 | super(context, attrs, -1); 17 | } 18 | 19 | public GradientTextView(Context context, AttributeSet attrs, int defStyle) { 20 | super(context, attrs, defStyle); 21 | } 22 | 23 | protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 24 | super.onLayout(changed, left, top, right, bottom); 25 | if (changed) { 26 | getPaint().setShader(new LinearGradient(0.0f, 0.0f, (float) getWidth(), 0.0f, Color.parseColor("#FF6699cc"), Color.parseColor("#906699cc"), TileMode.CLAMP)); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /java/com/chelpus/XNodeException.java: -------------------------------------------------------------------------------- 1 | package com.chelpus; 2 | 3 | public class XNodeException extends Exception { 4 | private static final long serialVersionUID = 6194649056119743851L; 5 | 6 | public XNodeException(String message) { 7 | super(message); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/WriteSettingsXposed.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.chelpus.Utils; 4 | import com.google.android.finsky.billing.iab.google.util.Base64; 5 | import com.google.android.finsky.billing.iab.google.util.Base64DecoderException; 6 | import java.io.File; 7 | 8 | public class WriteSettingsXposed { 9 | public static void main(String[] params) { 10 | Utils.startRootJava(new Object() { 11 | }); 12 | try { 13 | Utils.save_text_to_file(new File("/data/lp/xposed"), new String(Base64.decode(params[0]))); 14 | new File("/data/lp/xposed").setLastModified(System.currentTimeMillis()); 15 | } catch (Base64DecoderException e) { 16 | e.printStackTrace(); 17 | } 18 | Utils.run_all_no_root("chmod", "777", "/data/lp/xposed"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/checkDataSize.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.chelpus.Utils; 4 | import java.io.File; 5 | import java.io.IOException; 6 | 7 | public class checkDataSize { 8 | public static void main(String[] paramArrayOfString) { 9 | Utils.startRootJava(null); 10 | float size = 0.0f; 11 | try { 12 | size = new Utils("calculSize").sizeFolder(new File(paramArrayOfString[0]), true); 13 | } catch (IOException e) { 14 | e.printStackTrace(); 15 | } 16 | System.out.println(String.format("%.3f", new Object[]{Float.valueOf(size)})); 17 | Utils.exitFromRootJava(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/checkWithFramework.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import android.util.Log; 4 | import com.chelpus.Utils; 5 | 6 | public class checkWithFramework { 7 | public static void main(String[] paramArrayOfString) { 8 | Utils.startRootJava(new Object() { 9 | }); 10 | try { 11 | Log.d("", ""); 12 | System.out.println("found wtchFrm"); 13 | Utils.exitFromRootJava(); 14 | } catch (UnsatisfiedLinkError e) { 15 | System.out.println("withoutFramework"); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/check_sd_from_root.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.chelpus.Utils; 4 | import java.io.File; 5 | 6 | public class check_sd_from_root { 7 | public static void main(String[] paramArrayOfString) { 8 | Utils.startRootJava(new Object() { 9 | }); 10 | try { 11 | if (new File(paramArrayOfString[0] + "/test.tmp").exists()) { 12 | System.out.println("LuckyPatcher: Found test.tmp"); 13 | new File(paramArrayOfString[0] + "/test.tmp").delete(); 14 | } 15 | } catch (Exception e) { 16 | e.printStackTrace(); 17 | } 18 | Utils.exitFromRootJava(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/optimizedex.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.android.vending.billing.InAppBillingService.LOCK.listAppsFragment; 4 | import com.chelpus.Utils; 5 | import java.io.File; 6 | 7 | public class optimizedex { 8 | public static void main(String[] paramArrayOfString) { 9 | Utils.startRootJava(new Object() { 10 | }); 11 | String path_apk = paramArrayOfString[0]; 12 | String uid = paramArrayOfString[1]; 13 | String runtime = paramArrayOfString[2]; 14 | String workingDir = listAppsFragment.toolfilesdir + "/tmp"; 15 | int res = 255; 16 | if (Utils.classes_test(new File(path_apk))) { 17 | res = Utils.dexopt(path_apk, workingDir, Utils.getOdexForCreate(path_apk, uid), uid, Boolean.valueOf(runtime.equals("ART"))); 18 | } else { 19 | System.out.println("chelpus_return_10"); 20 | } 21 | if (res == 0) { 22 | System.out.println("chelpus_return_0"); 23 | } 24 | if (res == 1) { 25 | System.out.println("chelpus_return_1"); 26 | } 27 | if (res == 4) { 28 | System.out.println("chelpus_return_4"); 29 | } 30 | Utils.exitFromRootJava(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/rename.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.chelpus.Utils; 4 | import java.io.File; 5 | 6 | public class rename { 7 | public static void main(String[] paramArrayOfString) { 8 | Utils.startRootJava(new Object() { 9 | }); 10 | File file = new File(paramArrayOfString[0]); 11 | File new_name = new File(paramArrayOfString[1]); 12 | System.out.println(file); 13 | System.out.println(new_name); 14 | file.renameTo(new_name); 15 | System.out.println("File rename from " + file + " to " + new_name); 16 | Utils.exitFromRootJava(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/reworkhost.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.chelpus.Utils; 4 | import java.io.File; 5 | 6 | public class reworkhost { 7 | public static void main(String[] paramArrayOfString) { 8 | Utils.startRootJava(new Object() { 9 | }); 10 | Utils.save_text_to_file(new File("/system/etc/hosts"), "127.0.0.1 localhost\n"); 11 | Utils.cmdParam("chmod", "0644", "/system/etc/hosts"); 12 | Utils.exitFromRootJava(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /java/com/chelpus/root/utils/unusedodex.java: -------------------------------------------------------------------------------- 1 | package com.chelpus.root.utils; 2 | 3 | import com.chelpus.Utils; 4 | import java.io.File; 5 | 6 | public class unusedodex { 7 | public static void main(String[] paramArrayOfString) { 8 | Utils.startRootJava(new Object() { 9 | }); 10 | int j = 0; 11 | try { 12 | File appDir = new File("/data/app/"); 13 | if (appDir.exists()) { 14 | for (File file : appDir.listFiles()) { 15 | File TempFile = new File(Utils.changeExtension(file.toString(), "apk")); 16 | if (file.toString().toLowerCase().endsWith(".odex") && !TempFile.exists()) { 17 | file.delete(); 18 | System.out.println(file + "|"); 19 | j++; 20 | } 21 | } 22 | } 23 | } catch (Exception e) { 24 | System.out.println("Exception e" + e.toString()); 25 | } 26 | if (j > 0) { 27 | System.out.println("Unused ODEX in /data/app/ removed!"); 28 | } 29 | Utils.exitFromRootJava(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /java/com/google/android/finsky/billing/iab/ItemsListItem.java: -------------------------------------------------------------------------------- 1 | package com.google.android.finsky.billing.iab; 2 | 3 | public class ItemsListItem { 4 | public int autobuy = 0; 5 | public String itemID; 6 | public String pData; 7 | public String pSignature; 8 | public int savePurchase = 0; 9 | 10 | public ItemsListItem(String itemId, String Data, String Signature, int savePurchase, int autobuy) { 11 | this.itemID = itemId; 12 | this.pData = Data; 13 | this.pSignature = Signature; 14 | this.savePurchase = savePurchase; 15 | this.autobuy = autobuy; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /java/com/google/android/finsky/billing/iab/google/util/Base64DecoderException.java: -------------------------------------------------------------------------------- 1 | package com.google.android.finsky.billing.iab.google.util; 2 | 3 | public class Base64DecoderException extends Exception { 4 | private static final long serialVersionUID = 1; 5 | 6 | public Base64DecoderException(String s) { 7 | super(s); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/com/google/android/finsky/billing/iab/google/util/IabException.java: -------------------------------------------------------------------------------- 1 | package com.google.android.finsky.billing.iab.google.util; 2 | 3 | public class IabException extends Exception { 4 | IabResult mResult; 5 | 6 | public IabException(IabResult r) { 7 | this(r, null); 8 | } 9 | 10 | public IabException(int response, String message) { 11 | this(new IabResult(response, message)); 12 | } 13 | 14 | public IabException(IabResult r, Exception cause) { 15 | super(r.getMessage(), cause); 16 | this.mResult = r; 17 | } 18 | 19 | public IabException(int response, String message, Exception cause) { 20 | this(new IabResult(response, message), cause); 21 | } 22 | 23 | public IabResult getResult() { 24 | return this.mResult; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /java/com/google/android/finsky/billing/iab/google/util/IabResult.java: -------------------------------------------------------------------------------- 1 | package com.google.android.finsky.billing.iab.google.util; 2 | 3 | public class IabResult { 4 | String mMessage; 5 | int mResponse; 6 | 7 | public IabResult(int response, String message) { 8 | this.mResponse = response; 9 | if (message == null || message.trim().length() == 0) { 10 | this.mMessage = IabHelper.getResponseDesc(response); 11 | } else { 12 | this.mMessage = new StringBuilder(String.valueOf(message)).append(" (response: ").append(IabHelper.getResponseDesc(response)).append(")").toString(); 13 | } 14 | } 15 | 16 | public int getResponse() { 17 | return this.mResponse; 18 | } 19 | 20 | public String getMessage() { 21 | return this.mMessage; 22 | } 23 | 24 | public boolean isSuccess() { 25 | return this.mResponse == 0; 26 | } 27 | 28 | public boolean isFailure() { 29 | return !isSuccess(); 30 | } 31 | 32 | public String toString() { 33 | return "IabResult: " + getMessage(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /java/com/googlecode/dex2jar/reader/io/DataIn.java: -------------------------------------------------------------------------------- 1 | package com.googlecode.dex2jar.reader.io; 2 | 3 | public interface DataIn { 4 | int getCurrentPosition(); 5 | 6 | void move(int i); 7 | 8 | void pop(); 9 | 10 | void push(); 11 | 12 | void pushMove(int i); 13 | 14 | int readByte(); 15 | 16 | byte[] readBytes(int i); 17 | 18 | int readIntx(); 19 | 20 | long readLeb128(); 21 | 22 | int readShortx(); 23 | 24 | int readUByte(); 25 | 26 | int readUIntx(); 27 | 28 | long readULeb128(); 29 | 30 | int readUShortx(); 31 | 32 | void skip(int i); 33 | } 34 | -------------------------------------------------------------------------------- /java/com/googlecode/dex2jar/reader/io/DataOut.java: -------------------------------------------------------------------------------- 1 | package com.googlecode.dex2jar.reader.io; 2 | 3 | import java.io.IOException; 4 | 5 | public interface DataOut { 6 | void writeByte(int i) throws IOException; 7 | 8 | void writeBytes(byte[] bArr) throws IOException; 9 | 10 | void writeInt(int i) throws IOException; 11 | 12 | void writeShort(int i) throws IOException; 13 | } 14 | -------------------------------------------------------------------------------- /java/com/googlecode/dex2jar/reader/io/LeDataOut.java: -------------------------------------------------------------------------------- 1 | package com.googlecode.dex2jar.reader.io; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | 6 | public class LeDataOut implements DataOut { 7 | private OutputStream os; 8 | 9 | public LeDataOut(OutputStream os) { 10 | this.os = os; 11 | } 12 | 13 | public void writeByte(int v) throws IOException { 14 | this.os.write(v); 15 | } 16 | 17 | public void writeBytes(byte[] bs) throws IOException { 18 | this.os.write(bs); 19 | } 20 | 21 | public void writeInt(int v) throws IOException { 22 | this.os.write(v); 23 | this.os.write(v >> 8); 24 | this.os.write(v >> 16); 25 | this.os.write(v >>> 24); 26 | } 27 | 28 | public void writeShort(int v) throws IOException { 29 | this.os.write(v); 30 | this.os.write(v >> 8); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /java/com/mba/proxylight/RequestFilter.java: -------------------------------------------------------------------------------- 1 | package com.mba.proxylight; 2 | 3 | public interface RequestFilter { 4 | boolean filter(Request request); 5 | } 6 | -------------------------------------------------------------------------------- /java/com/mba/proxylight/Socket.java: -------------------------------------------------------------------------------- 1 | package com.mba.proxylight; 2 | 3 | import java.nio.channels.SocketChannel; 4 | 5 | public class Socket { 6 | public long created = System.currentTimeMillis(); 7 | public long lastRead = this.created; 8 | public long lastWrite = this.created; 9 | public SocketChannel socket = null; 10 | } 11 | -------------------------------------------------------------------------------- /java/kellinwood/logging/ConsoleLoggerFactory.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging; 2 | 3 | public class ConsoleLoggerFactory implements LoggerFactory { 4 | public LoggerInterface getLogger(String category) { 5 | return new StreamLogger(category, System.out); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /java/kellinwood/logging/LoggerFactory.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging; 2 | 3 | public interface LoggerFactory { 4 | LoggerInterface getLogger(String str); 5 | } 6 | -------------------------------------------------------------------------------- /java/kellinwood/logging/LoggerInterface.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging; 2 | 3 | public interface LoggerInterface { 4 | public static final String DEBUG = "DEBUG"; 5 | public static final String ERROR = "ERROR"; 6 | public static final String INFO = "INFO"; 7 | public static final String WARNING = "WARNING"; 8 | 9 | void debug(String str); 10 | 11 | void debug(String str, Throwable th); 12 | 13 | void error(String str); 14 | 15 | void error(String str, Throwable th); 16 | 17 | void info(String str); 18 | 19 | void info(String str, Throwable th); 20 | 21 | boolean isDebugEnabled(); 22 | 23 | boolean isErrorEnabled(); 24 | 25 | boolean isInfoEnabled(); 26 | 27 | boolean isWarningEnabled(); 28 | 29 | void warning(String str); 30 | 31 | void warning(String str, Throwable th); 32 | } 33 | -------------------------------------------------------------------------------- /java/kellinwood/logging/LoggerManager.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging; 2 | 3 | import java.util.Map; 4 | import java.util.TreeMap; 5 | 6 | public class LoggerManager { 7 | static LoggerFactory factory = new NullLoggerFactory(); 8 | static Map loggers = new TreeMap(); 9 | 10 | public static void setLoggerFactory(LoggerFactory f) { 11 | factory = f; 12 | } 13 | 14 | public static LoggerInterface getLogger(String category) { 15 | LoggerInterface logger = (LoggerInterface) loggers.get(category); 16 | if (logger != null) { 17 | return logger; 18 | } 19 | logger = factory.getLogger(category); 20 | loggers.put(category, logger); 21 | return logger; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /java/kellinwood/logging/NullLoggerFactory.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging; 2 | 3 | public class NullLoggerFactory implements LoggerFactory { 4 | static LoggerInterface logger = new LoggerInterface() { 5 | public void debug(String message) { 6 | } 7 | 8 | public void debug(String message, Throwable t) { 9 | } 10 | 11 | public void error(String message) { 12 | } 13 | 14 | public void error(String message, Throwable t) { 15 | } 16 | 17 | public void info(String message) { 18 | } 19 | 20 | public void info(String message, Throwable t) { 21 | } 22 | 23 | public boolean isDebugEnabled() { 24 | return false; 25 | } 26 | 27 | public boolean isErrorEnabled() { 28 | return false; 29 | } 30 | 31 | public boolean isInfoEnabled() { 32 | return false; 33 | } 34 | 35 | public boolean isWarningEnabled() { 36 | return false; 37 | } 38 | 39 | public void warning(String message) { 40 | } 41 | 42 | public void warning(String message, Throwable t) { 43 | } 44 | }; 45 | 46 | public LoggerInterface getLogger(String category) { 47 | return logger; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /java/kellinwood/logging/StreamLogger.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging; 2 | 3 | import java.io.PrintStream; 4 | 5 | public class StreamLogger extends AbstractLogger { 6 | PrintStream out; 7 | 8 | public StreamLogger(String category, PrintStream out) { 9 | super(category); 10 | this.out = out; 11 | } 12 | 13 | protected void write(String level, String message, Throwable t) { 14 | this.out.print(format(level, message)); 15 | if (t != null) { 16 | t.printStackTrace(this.out); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /java/kellinwood/logging/android/AndroidLoggerFactory.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging.android; 2 | 3 | import kellinwood.logging.LoggerFactory; 4 | import kellinwood.logging.LoggerInterface; 5 | 6 | public class AndroidLoggerFactory implements LoggerFactory { 7 | public LoggerInterface getLogger(String category) { 8 | return new AndroidLogger(category); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /java/kellinwood/logging/log4j/Log4jLoggerFactory.java: -------------------------------------------------------------------------------- 1 | package kellinwood.logging.log4j; 2 | 3 | import kellinwood.logging.LoggerFactory; 4 | import kellinwood.logging.LoggerInterface; 5 | 6 | public class Log4jLoggerFactory implements LoggerFactory { 7 | public LoggerInterface getLogger(String category) { 8 | return new Log4jLogger(category); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/AutoKeyException.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner; 2 | 3 | public class AutoKeyException extends RuntimeException { 4 | private static final long serialVersionUID = 1; 5 | 6 | public AutoKeyException(String message) { 7 | super(message); 8 | } 9 | 10 | public AutoKeyException(String message, Throwable cause) { 11 | super(message, cause); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/ProgressEvent.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner; 2 | 3 | public class ProgressEvent { 4 | public static final int PRORITY_IMPORTANT = 1; 5 | public static final int PRORITY_NORMAL = 0; 6 | private String message; 7 | private int percentDone; 8 | private int priority; 9 | 10 | public String getMessage() { 11 | return this.message; 12 | } 13 | 14 | public void setMessage(String message) { 15 | this.message = message; 16 | } 17 | 18 | public int getPercentDone() { 19 | return this.percentDone; 20 | } 21 | 22 | public void setPercentDone(int percentDone) { 23 | this.percentDone = percentDone; 24 | } 25 | 26 | public int getPriority() { 27 | return this.priority; 28 | } 29 | 30 | public void setPriority(int priority) { 31 | this.priority = priority; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/ProgressListener.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner; 2 | 3 | public interface ProgressListener { 4 | void onProgress(ProgressEvent progressEvent); 5 | } 6 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/ResourceAdapter.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner; 2 | 3 | public interface ResourceAdapter { 4 | 5 | public enum Item { 6 | INPUT_SAME_AS_OUTPUT_ERROR, 7 | AUTO_KEY_SELECTION_ERROR, 8 | LOADING_CERTIFICATE_AND_KEY, 9 | PARSING_CENTRAL_DIRECTORY, 10 | GENERATING_MANIFEST, 11 | GENERATING_SIGNATURE_FILE, 12 | GENERATING_SIGNATURE_BLOCK, 13 | COPYING_ZIP_ENTRY 14 | } 15 | 16 | String getString(Item item, Object... objArr); 17 | } 18 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/optional/CustomKeySigner.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner.optional; 2 | 3 | import java.security.KeyStore; 4 | import java.security.PrivateKey; 5 | import java.security.cert.X509Certificate; 6 | import kellinwood.security.zipsigner.ZipSigner; 7 | 8 | public class CustomKeySigner { 9 | public static void signZip(ZipSigner zipSigner, String keystorePath, char[] keystorePw, String certAlias, char[] certPw, String signatureAlgorithm, String inputZipFilename, String outputZipFilename) throws Exception { 10 | zipSigner.issueLoadingCertAndKeysProgressEvent(); 11 | KeyStore keystore = KeyStoreFileManager.loadKeyStore(keystorePath, keystorePw); 12 | ZipSigner zipSigner2 = zipSigner; 13 | zipSigner2.setKeys("custom", (X509Certificate) keystore.getCertificate(certAlias), (PrivateKey) keystore.getKey(certAlias, certPw), signatureAlgorithm, null); 14 | zipSigner.signZip(inputZipFilename, outputZipFilename); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/optional/JksKeyStore.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner.optional; 2 | 3 | import java.security.KeyStore; 4 | 5 | public class JksKeyStore extends KeyStore { 6 | public JksKeyStore() { 7 | super(new JKS(), KeyStoreFileManager.getProvider(), "jks"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/kellinwood/security/zipsigner/optional/KeyNameConflictException.java: -------------------------------------------------------------------------------- 1 | package kellinwood.security.zipsigner.optional; 2 | 3 | public class KeyNameConflictException extends Exception { 4 | } 5 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/crypto/IDecrypter.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.crypto; 2 | 3 | import net.lingala.zip4j.exception.ZipException; 4 | 5 | public interface IDecrypter { 6 | int decryptData(byte[] bArr) throws ZipException; 7 | 8 | int decryptData(byte[] bArr, int i, int i2) throws ZipException; 9 | } 10 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/crypto/IEncrypter.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.crypto; 2 | 3 | import net.lingala.zip4j.exception.ZipException; 4 | 5 | public interface IEncrypter { 6 | int encryptData(byte[] bArr) throws ZipException; 7 | 8 | int encryptData(byte[] bArr, int i, int i2) throws ZipException; 9 | } 10 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/crypto/PBKDF2/PBKDF2HexFormatter.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.crypto.PBKDF2; 2 | 3 | class PBKDF2HexFormatter { 4 | PBKDF2HexFormatter() { 5 | } 6 | 7 | public boolean fromString(PBKDF2Parameters p, String s) { 8 | if (p == null || s == null) { 9 | return true; 10 | } 11 | String[] p123 = s.split(":"); 12 | if (p123 == null || p123.length != 3) { 13 | return true; 14 | } 15 | byte[] salt = BinTools.hex2bin(p123[0]); 16 | int iterationCount = Integer.parseInt(p123[1]); 17 | byte[] bDK = BinTools.hex2bin(p123[2]); 18 | p.setSalt(salt); 19 | p.setIterationCount(iterationCount); 20 | p.setDerivedKey(bDK); 21 | return false; 22 | } 23 | 24 | public String toString(PBKDF2Parameters p) { 25 | return new StringBuilder(String.valueOf(BinTools.bin2hex(p.getSalt()))).append(":").append(String.valueOf(p.getIterationCount())).append(":").append(BinTools.bin2hex(p.getDerivedKey())).toString(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/crypto/PBKDF2/PRF.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.crypto.PBKDF2; 2 | 3 | interface PRF { 4 | byte[] doFinal(byte[] bArr); 5 | 6 | int getHLen(); 7 | 8 | void init(byte[] bArr); 9 | } 10 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/exception/ZipException.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.exception; 2 | 3 | public class ZipException extends Exception { 4 | private static final long serialVersionUID = 1; 5 | private int code = -1; 6 | 7 | public ZipException(String msg) { 8 | super(msg); 9 | } 10 | 11 | public ZipException(String message, Throwable cause) { 12 | super(message, cause); 13 | } 14 | 15 | public ZipException(String msg, int code) { 16 | super(msg); 17 | this.code = code; 18 | } 19 | 20 | public ZipException(String message, Throwable cause, int code) { 21 | super(message, cause); 22 | this.code = code; 23 | } 24 | 25 | public ZipException(Throwable cause) { 26 | super(cause); 27 | } 28 | 29 | public ZipException(Throwable cause, int code) { 30 | super(cause); 31 | this.code = code; 32 | } 33 | 34 | public int getCode() { 35 | return this.code; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/exception/ZipExceptionConstants.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.exception; 2 | 3 | public interface ZipExceptionConstants { 4 | public static final int WRONG_PASSWORD = 5; 5 | public static final int constuctorFileNotFoundException = 2; 6 | public static final int inputZipParamIsNull = 1; 7 | public static final int notZipFile = 4; 8 | public static final int randomAccessFileNull = 3; 9 | } 10 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/io/BaseInputStream.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.io; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import net.lingala.zip4j.unzip.UnzipEngine; 6 | 7 | public abstract class BaseInputStream extends InputStream { 8 | public int read() throws IOException { 9 | return 0; 10 | } 11 | 12 | public void seek(long pos) throws IOException { 13 | } 14 | 15 | public int available() throws IOException { 16 | return 0; 17 | } 18 | 19 | public UnzipEngine getUnzipEngine() { 20 | return null; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/io/BaseOutputStream.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.io; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | 6 | public abstract class BaseOutputStream extends OutputStream { 7 | public void write(int b) throws IOException { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/io/ZipOutputStream.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.io; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | import net.lingala.zip4j.model.ZipModel; 6 | 7 | public class ZipOutputStream extends DeflaterOutputStream { 8 | public ZipOutputStream(OutputStream outputStream) { 9 | this(outputStream, null); 10 | } 11 | 12 | public ZipOutputStream(OutputStream outputStream, ZipModel zipModel) { 13 | super(outputStream, zipModel); 14 | } 15 | 16 | public void write(int bval) throws IOException { 17 | write(new byte[]{(byte) bval}, 0, 1); 18 | } 19 | 20 | public void write(byte[] b) throws IOException { 21 | write(b, 0, b.length); 22 | } 23 | 24 | public void write(byte[] b, int off, int len) throws IOException { 25 | this.crc.update(b, off, len); 26 | updateTotalBytesRead(len); 27 | super.write(b, off, len); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/model/ArchiveExtraDataRecord.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.model; 2 | 3 | public class ArchiveExtraDataRecord { 4 | private String extraFieldData; 5 | private int extraFieldLength; 6 | private int signature; 7 | 8 | public int getSignature() { 9 | return this.signature; 10 | } 11 | 12 | public void setSignature(int signature) { 13 | this.signature = signature; 14 | } 15 | 16 | public int getExtraFieldLength() { 17 | return this.extraFieldLength; 18 | } 19 | 20 | public void setExtraFieldLength(int extraFieldLength) { 21 | this.extraFieldLength = extraFieldLength; 22 | } 23 | 24 | public String getExtraFieldData() { 25 | return this.extraFieldData; 26 | } 27 | 28 | public void setExtraFieldData(String extraFieldData) { 29 | this.extraFieldData = extraFieldData; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/model/CentralDirectory.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.model; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class CentralDirectory { 6 | private DigitalSignature digitalSignature; 7 | private ArrayList fileHeaders; 8 | 9 | public ArrayList getFileHeaders() { 10 | return this.fileHeaders; 11 | } 12 | 13 | public void setFileHeaders(ArrayList fileHeaders) { 14 | this.fileHeaders = fileHeaders; 15 | } 16 | 17 | public DigitalSignature getDigitalSignature() { 18 | return this.digitalSignature; 19 | } 20 | 21 | public void setDigitalSignature(DigitalSignature digitalSignature) { 22 | this.digitalSignature = digitalSignature; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/model/DataDescriptor.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.model; 2 | 3 | public class DataDescriptor { 4 | private int compressedSize; 5 | private String crc32; 6 | private int uncompressedSize; 7 | 8 | public String getCrc32() { 9 | return this.crc32; 10 | } 11 | 12 | public void setCrc32(String crc32) { 13 | this.crc32 = crc32; 14 | } 15 | 16 | public int getCompressedSize() { 17 | return this.compressedSize; 18 | } 19 | 20 | public void setCompressedSize(int compressedSize) { 21 | this.compressedSize = compressedSize; 22 | } 23 | 24 | public int getUncompressedSize() { 25 | return this.uncompressedSize; 26 | } 27 | 28 | public void setUncompressedSize(int uncompressedSize) { 29 | this.uncompressedSize = uncompressedSize; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/model/DigitalSignature.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.model; 2 | 3 | public class DigitalSignature { 4 | private int headerSignature; 5 | private String signatureData; 6 | private int sizeOfData; 7 | 8 | public int getHeaderSignature() { 9 | return this.headerSignature; 10 | } 11 | 12 | public void setHeaderSignature(int headerSignature) { 13 | this.headerSignature = headerSignature; 14 | } 15 | 16 | public int getSizeOfData() { 17 | return this.sizeOfData; 18 | } 19 | 20 | public void setSizeOfData(int sizeOfData) { 21 | this.sizeOfData = sizeOfData; 22 | } 23 | 24 | public String getSignatureData() { 25 | return this.signatureData; 26 | } 27 | 28 | public void setSignatureData(String signatureData) { 29 | this.signatureData = signatureData; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/model/ExtraDataRecord.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.model; 2 | 3 | public class ExtraDataRecord { 4 | private byte[] data; 5 | private long header; 6 | private int sizeOfData; 7 | 8 | public long getHeader() { 9 | return this.header; 10 | } 11 | 12 | public void setHeader(long header) { 13 | this.header = header; 14 | } 15 | 16 | public int getSizeOfData() { 17 | return this.sizeOfData; 18 | } 19 | 20 | public void setSizeOfData(int sizeOfData) { 21 | this.sizeOfData = sizeOfData; 22 | } 23 | 24 | public byte[] getData() { 25 | return this.data; 26 | } 27 | 28 | public void setData(byte[] data) { 29 | this.data = data; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/model/Zip64EndCentralDirLocator.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.model; 2 | 3 | public class Zip64EndCentralDirLocator { 4 | private int noOfDiskStartOfZip64EndOfCentralDirRec; 5 | private long offsetZip64EndOfCentralDirRec; 6 | private long signature; 7 | private int totNumberOfDiscs; 8 | 9 | public long getSignature() { 10 | return this.signature; 11 | } 12 | 13 | public void setSignature(long signature) { 14 | this.signature = signature; 15 | } 16 | 17 | public int getNoOfDiskStartOfZip64EndOfCentralDirRec() { 18 | return this.noOfDiskStartOfZip64EndOfCentralDirRec; 19 | } 20 | 21 | public void setNoOfDiskStartOfZip64EndOfCentralDirRec(int noOfDiskStartOfZip64EndOfCentralDirRec) { 22 | this.noOfDiskStartOfZip64EndOfCentralDirRec = noOfDiskStartOfZip64EndOfCentralDirRec; 23 | } 24 | 25 | public long getOffsetZip64EndOfCentralDirRec() { 26 | return this.offsetZip64EndOfCentralDirRec; 27 | } 28 | 29 | public void setOffsetZip64EndOfCentralDirRec(long offsetZip64EndOfCentralDirRec) { 30 | this.offsetZip64EndOfCentralDirRec = offsetZip64EndOfCentralDirRec; 31 | } 32 | 33 | public int getTotNumberOfDiscs() { 34 | return this.totNumberOfDiscs; 35 | } 36 | 37 | public void setTotNumberOfDiscs(int totNumberOfDiscs) { 38 | this.totNumberOfDiscs = totNumberOfDiscs; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /java/net/lingala/zip4j/util/Zip4jConstants.java: -------------------------------------------------------------------------------- 1 | package net.lingala.zip4j.util; 2 | 3 | public interface Zip4jConstants { 4 | public static final int AES_STRENGTH_128 = 1; 5 | public static final int AES_STRENGTH_192 = 2; 6 | public static final int AES_STRENGTH_256 = 3; 7 | public static final int COMP_AES_ENC = 99; 8 | public static final int COMP_DEFLATE = 8; 9 | public static final int COMP_STORE = 0; 10 | public static final int DEFLATE_LEVEL_FAST = 3; 11 | public static final int DEFLATE_LEVEL_FASTEST = 1; 12 | public static final int DEFLATE_LEVEL_MAXIMUM = 7; 13 | public static final int DEFLATE_LEVEL_NORMAL = 5; 14 | public static final int DEFLATE_LEVEL_ULTRA = 9; 15 | public static final int ENC_METHOD_AES = 99; 16 | public static final int ENC_METHOD_STANDARD = 0; 17 | public static final int ENC_NO_ENCRYPTION = -1; 18 | } 19 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/ARMOptions.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.InputStream; 4 | import org.tukaani.xz.simple.ARM; 5 | 6 | public class ARMOptions extends BCJOptions { 7 | private static final int ALIGNMENT = 4; 8 | 9 | public /* bridge */ /* synthetic */ Object clone() { 10 | return super.clone(); 11 | } 12 | 13 | public /* bridge */ /* synthetic */ int getDecoderMemoryUsage() { 14 | return super.getDecoderMemoryUsage(); 15 | } 16 | 17 | public /* bridge */ /* synthetic */ int getEncoderMemoryUsage() { 18 | return super.getEncoderMemoryUsage(); 19 | } 20 | 21 | public /* bridge */ /* synthetic */ int getStartOffset() { 22 | return super.getStartOffset(); 23 | } 24 | 25 | public /* bridge */ /* synthetic */ void setStartOffset(int i) throws UnsupportedOptionsException { 26 | super.setStartOffset(i); 27 | } 28 | 29 | public ARMOptions() { 30 | super(ALIGNMENT); 31 | } 32 | 33 | public FinishableOutputStream getOutputStream(FinishableOutputStream out) { 34 | return new SimpleOutputStream(out, new ARM(true, this.startOffset)); 35 | } 36 | 37 | public InputStream getInputStream(InputStream in) { 38 | return new SimpleInputStream(in, new ARM(false, this.startOffset)); 39 | } 40 | 41 | FilterEncoder getFilterEncoder() { 42 | return new BCJEncoder(this, 7); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/BCJCoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | abstract class BCJCoder implements FilterCoder { 4 | public static final long ARMTHUMB_FILTER_ID = 8; 5 | public static final long ARM_FILTER_ID = 7; 6 | public static final long IA64_FILTER_ID = 6; 7 | public static final long POWERPC_FILTER_ID = 5; 8 | public static final long SPARC_FILTER_ID = 9; 9 | public static final long X86_FILTER_ID = 4; 10 | 11 | BCJCoder() { 12 | } 13 | 14 | public static boolean isBCJFilterID(long filterID) { 15 | return filterID >= X86_FILTER_ID && filterID <= SPARC_FILTER_ID; 16 | } 17 | 18 | public boolean changesSize() { 19 | return false; 20 | } 21 | 22 | public boolean nonLastOK() { 23 | return true; 24 | } 25 | 26 | public boolean lastOK() { 27 | return false; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/BCJOptions.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | abstract class BCJOptions extends FilterOptions { 4 | static final /* synthetic */ boolean $assertionsDisabled = (!BCJOptions.class.desiredAssertionStatus()); 5 | private final int alignment; 6 | int startOffset = 0; 7 | 8 | BCJOptions(int alignment) { 9 | this.alignment = alignment; 10 | } 11 | 12 | public void setStartOffset(int startOffset) throws UnsupportedOptionsException { 13 | if (((this.alignment - 1) & startOffset) != 0) { 14 | throw new UnsupportedOptionsException("Start offset must be a multiple of " + this.alignment); 15 | } 16 | this.startOffset = startOffset; 17 | } 18 | 19 | public int getStartOffset() { 20 | return this.startOffset; 21 | } 22 | 23 | public int getEncoderMemoryUsage() { 24 | return SimpleOutputStream.getMemoryUsage(); 25 | } 26 | 27 | public int getDecoderMemoryUsage() { 28 | return SimpleInputStream.getMemoryUsage(); 29 | } 30 | 31 | public Object clone() { 32 | try { 33 | return super.clone(); 34 | } catch (CloneNotSupportedException e) { 35 | if ($assertionsDisabled) { 36 | throw new RuntimeException(); 37 | } 38 | throw new AssertionError(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/CorruptedInputException.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | public class CorruptedInputException extends XZIOException { 4 | private static final long serialVersionUID = 3; 5 | 6 | public CorruptedInputException() { 7 | super("Compressed data is corrupt"); 8 | } 9 | 10 | public CorruptedInputException(String s) { 11 | super(s); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/CountingInputStream.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.FilterInputStream; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | 7 | class CountingInputStream extends FilterInputStream { 8 | private long size = 0; 9 | 10 | public CountingInputStream(InputStream in) { 11 | super(in); 12 | } 13 | 14 | public int read() throws IOException { 15 | int ret = this.in.read(); 16 | if (ret != -1 && this.size >= 0) { 17 | this.size++; 18 | } 19 | return ret; 20 | } 21 | 22 | public int read(byte[] b, int off, int len) throws IOException { 23 | int ret = this.in.read(b, off, len); 24 | if (ret > 0 && this.size >= 0) { 25 | this.size += (long) ret; 26 | } 27 | return ret; 28 | } 29 | 30 | public long getSize() { 31 | return this.size; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/CountingOutputStream.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | 6 | class CountingOutputStream extends FinishableOutputStream { 7 | private final OutputStream out; 8 | private long size = 0; 9 | 10 | public CountingOutputStream(OutputStream out) { 11 | this.out = out; 12 | } 13 | 14 | public void write(int b) throws IOException { 15 | this.out.write(b); 16 | if (this.size >= 0) { 17 | this.size++; 18 | } 19 | } 20 | 21 | public void write(byte[] b, int off, int len) throws IOException { 22 | this.out.write(b, off, len); 23 | if (this.size >= 0) { 24 | this.size += (long) len; 25 | } 26 | } 27 | 28 | public void flush() throws IOException { 29 | this.out.flush(); 30 | } 31 | 32 | public void close() throws IOException { 33 | this.out.close(); 34 | } 35 | 36 | public long getSize() { 37 | return this.size; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/DeltaCoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | abstract class DeltaCoder implements FilterCoder { 4 | public static final long FILTER_ID = 3; 5 | 6 | DeltaCoder() { 7 | } 8 | 9 | public boolean changesSize() { 10 | return false; 11 | } 12 | 13 | public boolean nonLastOK() { 14 | return true; 15 | } 16 | 17 | public boolean lastOK() { 18 | return false; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/DeltaDecoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.InputStream; 4 | 5 | class DeltaDecoder extends DeltaCoder implements FilterDecoder { 6 | private final int distance; 7 | 8 | DeltaDecoder(byte[] props) throws UnsupportedOptionsException { 9 | if (props.length != 1) { 10 | throw new UnsupportedOptionsException("Unsupported Delta filter properties"); 11 | } 12 | this.distance = (props[0] & 255) + 1; 13 | } 14 | 15 | public int getMemoryUsage() { 16 | return 1; 17 | } 18 | 19 | public InputStream getInputStream(InputStream in) { 20 | return new DeltaInputStream(in, this.distance); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/DeltaEncoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | class DeltaEncoder extends DeltaCoder implements FilterEncoder { 4 | private final DeltaOptions options; 5 | private final byte[] props = new byte[1]; 6 | 7 | DeltaEncoder(DeltaOptions options) { 8 | this.props[0] = (byte) (options.getDistance() - 1); 9 | this.options = (DeltaOptions) options.clone(); 10 | } 11 | 12 | public long getFilterID() { 13 | return 3; 14 | } 15 | 16 | public byte[] getFilterProps() { 17 | return this.props; 18 | } 19 | 20 | public boolean supportsFlushing() { 21 | return true; 22 | } 23 | 24 | public FinishableOutputStream getOutputStream(FinishableOutputStream out) { 25 | return this.options.getOutputStream(out); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/FilterCoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | interface FilterCoder { 4 | boolean changesSize(); 5 | 6 | boolean lastOK(); 7 | 8 | boolean nonLastOK(); 9 | } 10 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/FilterDecoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.InputStream; 4 | 5 | interface FilterDecoder extends FilterCoder { 6 | InputStream getInputStream(InputStream inputStream); 7 | 8 | int getMemoryUsage(); 9 | } 10 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/FilterEncoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | interface FilterEncoder extends FilterCoder { 4 | long getFilterID(); 5 | 6 | byte[] getFilterProps(); 7 | 8 | FinishableOutputStream getOutputStream(FinishableOutputStream finishableOutputStream); 9 | 10 | boolean supportsFlushing(); 11 | } 12 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/FilterOptions.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | public abstract class FilterOptions implements Cloneable { 7 | public abstract int getDecoderMemoryUsage(); 8 | 9 | public abstract int getEncoderMemoryUsage(); 10 | 11 | abstract FilterEncoder getFilterEncoder(); 12 | 13 | public abstract InputStream getInputStream(InputStream inputStream) throws IOException; 14 | 15 | public abstract FinishableOutputStream getOutputStream(FinishableOutputStream finishableOutputStream); 16 | 17 | public static int getEncoderMemoryUsage(FilterOptions[] options) { 18 | int m = 0; 19 | for (FilterOptions encoderMemoryUsage : options) { 20 | m += encoderMemoryUsage.getEncoderMemoryUsage(); 21 | } 22 | return m; 23 | } 24 | 25 | public static int getDecoderMemoryUsage(FilterOptions[] options) { 26 | int m = 0; 27 | for (FilterOptions decoderMemoryUsage : options) { 28 | m += decoderMemoryUsage.getDecoderMemoryUsage(); 29 | } 30 | return m; 31 | } 32 | 33 | FilterOptions() { 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/FinishableOutputStream.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | 6 | public abstract class FinishableOutputStream extends OutputStream { 7 | public void finish() throws IOException { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/FinishableWrapperOutputStream.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | 6 | public class FinishableWrapperOutputStream extends FinishableOutputStream { 7 | protected OutputStream out; 8 | 9 | public FinishableWrapperOutputStream(OutputStream out) { 10 | this.out = out; 11 | } 12 | 13 | public void write(int b) throws IOException { 14 | this.out.write(b); 15 | } 16 | 17 | public void write(byte[] buf) throws IOException { 18 | this.out.write(buf); 19 | } 20 | 21 | public void write(byte[] buf, int off, int len) throws IOException { 22 | this.out.write(buf, off, len); 23 | } 24 | 25 | public void flush() throws IOException { 26 | this.out.flush(); 27 | } 28 | 29 | public void close() throws IOException { 30 | this.out.close(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/IndexIndicatorException.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | class IndexIndicatorException extends Exception { 4 | private static final long serialVersionUID = 1; 5 | 6 | IndexIndicatorException() { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/LZMA2Coder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | abstract class LZMA2Coder implements FilterCoder { 4 | public static final long FILTER_ID = 33; 5 | 6 | LZMA2Coder() { 7 | } 8 | 9 | public boolean changesSize() { 10 | return true; 11 | } 12 | 13 | public boolean nonLastOK() { 14 | return false; 15 | } 16 | 17 | public boolean lastOK() { 18 | return true; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/LZMA2Decoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.InputStream; 4 | 5 | class LZMA2Decoder extends LZMA2Coder implements FilterDecoder { 6 | private int dictSize; 7 | 8 | LZMA2Decoder(byte[] props) throws UnsupportedOptionsException { 9 | if (props.length != 1 || (props[0] & 255) > 37) { 10 | throw new UnsupportedOptionsException("Unsupported LZMA2 properties"); 11 | } 12 | this.dictSize = (props[0] & 1) | 2; 13 | this.dictSize <<= (props[0] >>> 1) + 11; 14 | } 15 | 16 | public int getMemoryUsage() { 17 | return LZMA2InputStream.getMemoryUsage(this.dictSize); 18 | } 19 | 20 | public InputStream getInputStream(InputStream in) { 21 | return new LZMA2InputStream(in, this.dictSize); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/LZMA2Encoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import org.tukaani.xz.lzma.LZMAEncoder; 4 | 5 | class LZMA2Encoder extends LZMA2Coder implements FilterEncoder { 6 | private final LZMA2Options options; 7 | private final byte[] props = new byte[1]; 8 | 9 | LZMA2Encoder(LZMA2Options options) { 10 | if (options.getPresetDict() != null) { 11 | throw new IllegalArgumentException("XZ doesn't support a preset dictionary for now"); 12 | } 13 | if (options.getMode() == 0) { 14 | this.props[0] = (byte) 0; 15 | } else { 16 | this.props[0] = (byte) (LZMAEncoder.getDistSlot(Math.max(options.getDictSize(), LZMA2Options.DICT_SIZE_MIN) - 1) - 23); 17 | } 18 | this.options = (LZMA2Options) options.clone(); 19 | } 20 | 21 | public long getFilterID() { 22 | return 33; 23 | } 24 | 25 | public byte[] getFilterProps() { 26 | return this.props; 27 | } 28 | 29 | public boolean supportsFlushing() { 30 | return true; 31 | } 32 | 33 | public FinishableOutputStream getOutputStream(FinishableOutputStream out) { 34 | return this.options.getOutputStream(out); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/MemoryLimitException.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | public class MemoryLimitException extends XZIOException { 4 | private static final long serialVersionUID = 3; 5 | private final int memoryLimit; 6 | private final int memoryNeeded; 7 | 8 | public MemoryLimitException(int memoryNeeded, int memoryLimit) { 9 | super(memoryNeeded + " KiB of memory would be needed; limit was " + memoryLimit + " KiB"); 10 | this.memoryNeeded = memoryNeeded; 11 | this.memoryLimit = memoryLimit; 12 | } 13 | 14 | public int getMemoryNeeded() { 15 | return this.memoryNeeded; 16 | } 17 | 18 | public int getMemoryLimit() { 19 | return this.memoryLimit; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/RawCoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | class RawCoder { 4 | RawCoder() { 5 | } 6 | 7 | static void validate(FilterCoder[] filters) throws UnsupportedOptionsException { 8 | int i = 0; 9 | while (i < filters.length - 1) { 10 | if (filters[i].nonLastOK()) { 11 | i++; 12 | } else { 13 | throw new UnsupportedOptionsException("Unsupported XZ filter chain"); 14 | } 15 | } 16 | if (filters[filters.length - 1].lastOK()) { 17 | int changesSizeCount = 0; 18 | for (FilterCoder changesSize : filters) { 19 | if (changesSize.changesSize()) { 20 | changesSizeCount++; 21 | } 22 | } 23 | if (changesSizeCount > 3) { 24 | throw new UnsupportedOptionsException("Unsupported XZ filter chain"); 25 | } 26 | return; 27 | } 28 | throw new UnsupportedOptionsException("Unsupported XZ filter chain"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/SeekableInputStream.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | public abstract class SeekableInputStream extends InputStream { 7 | public abstract long length() throws IOException; 8 | 9 | public abstract long position() throws IOException; 10 | 11 | public abstract void seek(long j) throws IOException; 12 | 13 | public long skip(long n) throws IOException { 14 | if (n <= 0) { 15 | return 0; 16 | } 17 | long size = length(); 18 | long pos = position(); 19 | if (pos >= size) { 20 | return 0; 21 | } 22 | if (size - pos < n) { 23 | n = size - pos; 24 | } 25 | seek(pos + n); 26 | return n; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/UnsupportedOptionsException.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | public class UnsupportedOptionsException extends XZIOException { 4 | private static final long serialVersionUID = 3; 5 | 6 | public UnsupportedOptionsException(String s) { 7 | super(s); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/X86Options.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.InputStream; 4 | import org.tukaani.xz.simple.X86; 5 | 6 | public class X86Options extends BCJOptions { 7 | private static final int ALIGNMENT = 1; 8 | 9 | public /* bridge */ /* synthetic */ Object clone() { 10 | return super.clone(); 11 | } 12 | 13 | public /* bridge */ /* synthetic */ int getDecoderMemoryUsage() { 14 | return super.getDecoderMemoryUsage(); 15 | } 16 | 17 | public /* bridge */ /* synthetic */ int getEncoderMemoryUsage() { 18 | return super.getEncoderMemoryUsage(); 19 | } 20 | 21 | public /* bridge */ /* synthetic */ int getStartOffset() { 22 | return super.getStartOffset(); 23 | } 24 | 25 | public /* bridge */ /* synthetic */ void setStartOffset(int i) throws UnsupportedOptionsException { 26 | super.setStartOffset(i); 27 | } 28 | 29 | public X86Options() { 30 | super(ALIGNMENT); 31 | } 32 | 33 | public FinishableOutputStream getOutputStream(FinishableOutputStream out) { 34 | return new SimpleOutputStream(out, new X86(true, this.startOffset)); 35 | } 36 | 37 | public InputStream getInputStream(InputStream in) { 38 | return new SimpleInputStream(in, new X86(false, this.startOffset)); 39 | } 40 | 41 | FilterEncoder getFilterEncoder() { 42 | return new BCJEncoder(this, 4); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/XZ.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | public class XZ { 4 | public static final int CHECK_CRC32 = 1; 5 | public static final int CHECK_CRC64 = 4; 6 | public static final int CHECK_NONE = 0; 7 | public static final int CHECK_SHA256 = 10; 8 | public static final byte[] FOOTER_MAGIC = new byte[]{(byte) 89, (byte) 90}; 9 | public static final byte[] HEADER_MAGIC; 10 | 11 | static { 12 | byte[] bArr = new byte[6]; 13 | bArr[CHECK_NONE] = (byte) -3; 14 | bArr[CHECK_CRC32] = (byte) 55; 15 | bArr[2] = (byte) 122; 16 | bArr[3] = (byte) 88; 17 | bArr[CHECK_CRC64] = (byte) 90; 18 | HEADER_MAGIC = bArr; 19 | } 20 | 21 | private XZ() { 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/XZFormatException.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | public class XZFormatException extends XZIOException { 4 | private static final long serialVersionUID = 3; 5 | 6 | public XZFormatException() { 7 | super("Input is not in the XZ format"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/XZIOException.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | import java.io.IOException; 4 | 5 | public class XZIOException extends IOException { 6 | private static final long serialVersionUID = 3; 7 | 8 | public XZIOException(String s) { 9 | super(s); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/check/CRC32.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.check; 2 | 3 | public class CRC32 extends Check { 4 | private final java.util.zip.CRC32 state; 5 | 6 | public CRC32() { 7 | this.state = new java.util.zip.CRC32(); 8 | this.size = 4; 9 | this.name = "CRC32"; 10 | } 11 | 12 | public void update(byte[] buf, int off, int len) { 13 | this.state.update(buf, off, len); 14 | } 15 | 16 | public byte[] finish() { 17 | long value = this.state.getValue(); 18 | byte[] buf = new byte[]{(byte) ((int) value), (byte) ((int) (value >>> 8)), (byte) ((int) (value >>> 16)), (byte) ((int) (value >>> 24))}; 19 | this.state.reset(); 20 | return buf; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/check/None.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.check; 2 | 3 | public class None extends Check { 4 | public None() { 5 | this.size = 0; 6 | this.name = "None"; 7 | } 8 | 9 | public void update(byte[] buf, int off, int len) { 10 | } 11 | 12 | public byte[] finish() { 13 | return new byte[0]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/check/SHA256.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.check; 2 | 3 | import java.security.MessageDigest; 4 | import java.security.NoSuchAlgorithmException; 5 | 6 | public class SHA256 extends Check { 7 | private final MessageDigest sha256; 8 | 9 | public SHA256() throws NoSuchAlgorithmException { 10 | this.size = 32; 11 | this.name = "SHA-256"; 12 | this.sha256 = MessageDigest.getInstance("SHA-256"); 13 | } 14 | 15 | public void update(byte[] buf, int off, int len) { 16 | this.sha256.update(buf, off, len); 17 | } 18 | 19 | public byte[] finish() { 20 | byte[] buf = this.sha256.digest(); 21 | this.sha256.reset(); 22 | return buf; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/common/EncoderUtil.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.common; 2 | 3 | import java.io.IOException; 4 | import java.io.OutputStream; 5 | import java.util.zip.CRC32; 6 | 7 | public class EncoderUtil extends Util { 8 | public static void writeCRC32(OutputStream out, byte[] buf) throws IOException { 9 | CRC32 crc32 = new CRC32(); 10 | crc32.update(buf); 11 | long value = crc32.getValue(); 12 | for (int i = 0; i < 4; i++) { 13 | out.write((byte) ((int) (value >>> (i * 8)))); 14 | } 15 | } 16 | 17 | public static void encodeVLI(OutputStream out, long num) throws IOException { 18 | while (num >= 128) { 19 | out.write((byte) ((int) (num | 128))); 20 | num >>>= 7; 21 | } 22 | out.write((byte) ((int) num)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/common/StreamFlags.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.common; 2 | 3 | public class StreamFlags { 4 | public long backwardSize = -1; 5 | public int checkType = -1; 6 | } 7 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/common/Util.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.common; 2 | 3 | public class Util { 4 | public static final long BACKWARD_SIZE_MAX = 17179869184L; 5 | public static final int BLOCK_HEADER_SIZE_MAX = 1024; 6 | public static final int STREAM_HEADER_SIZE = 12; 7 | public static final long VLI_MAX = Long.MAX_VALUE; 8 | public static final int VLI_SIZE_MAX = 9; 9 | 10 | public static int getVLISize(long num) { 11 | int size = 0; 12 | do { 13 | size++; 14 | num >>= 7; 15 | } while (num != 0); 16 | return size; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/delta/DeltaCoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.delta; 2 | 3 | abstract class DeltaCoder { 4 | static final int DISTANCE_MASK = 255; 5 | static final int DISTANCE_MAX = 256; 6 | static final int DISTANCE_MIN = 1; 7 | final int distance; 8 | final byte[] history = new byte[DISTANCE_MAX]; 9 | int pos = 0; 10 | 11 | DeltaCoder(int distance) { 12 | if (distance < DISTANCE_MIN || distance > DISTANCE_MAX) { 13 | throw new IllegalArgumentException(); 14 | } 15 | this.distance = distance; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/delta/DeltaDecoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.delta; 2 | 3 | public class DeltaDecoder extends DeltaCoder { 4 | public DeltaDecoder(int distance) { 5 | super(distance); 6 | } 7 | 8 | public void decode(byte[] buf, int off, int len) { 9 | int end = off + len; 10 | for (int i = off; i < end; i++) { 11 | buf[i] = (byte) (buf[i] + this.history[(this.distance + this.pos) & 255]); 12 | byte[] bArr = this.history; 13 | int i2 = this.pos; 14 | this.pos = i2 - 1; 15 | bArr[i2 & 255] = buf[i]; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/delta/DeltaEncoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.delta; 2 | 3 | public class DeltaEncoder extends DeltaCoder { 4 | public DeltaEncoder(int distance) { 5 | super(distance); 6 | } 7 | 8 | public void encode(byte[] in, int in_off, int len, byte[] out) { 9 | for (int i = 0; i < len; i++) { 10 | byte tmp = this.history[(this.distance + this.pos) & 255]; 11 | byte[] bArr = this.history; 12 | int i2 = this.pos; 13 | this.pos = i2 - 1; 14 | bArr[i2 & 255] = in[in_off + i]; 15 | out[i] = (byte) (in[in_off + i] - tmp); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/index/BlockInfo.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.index; 2 | 3 | public class BlockInfo { 4 | public int blockNumber = -1; 5 | public long compressedOffset = -1; 6 | IndexDecoder index; 7 | public long uncompressedOffset = -1; 8 | public long uncompressedSize = -1; 9 | public long unpaddedSize = -1; 10 | 11 | public BlockInfo(IndexDecoder indexOfFirstStream) { 12 | this.index = indexOfFirstStream; 13 | } 14 | 15 | public int getCheckType() { 16 | return this.index.getStreamFlags().checkType; 17 | } 18 | 19 | public boolean hasNext() { 20 | return this.index.hasRecord(this.blockNumber + 1); 21 | } 22 | 23 | public void setNext() { 24 | this.index.setBlockInfo(this, this.blockNumber + 1); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/index/IndexRecord.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.index; 2 | 3 | class IndexRecord { 4 | final long uncompressed; 5 | final long unpadded; 6 | 7 | IndexRecord(long unpadded, long uncompressed) { 8 | this.unpadded = unpadded; 9 | this.uncompressed = uncompressed; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/lz/CRC32Hash.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.lz; 2 | 3 | import pxb.android.ResConst; 4 | 5 | class CRC32Hash { 6 | private static final int CRC32_POLY = -306674912; 7 | static final int[] crcTable = new int[ResConst.RES_XML_START_NAMESPACE_TYPE]; 8 | 9 | CRC32Hash() { 10 | } 11 | 12 | static { 13 | for (int i = 0; i < ResConst.RES_XML_START_NAMESPACE_TYPE; i++) { 14 | int r = i; 15 | for (int j = 0; j < 8; j++) { 16 | if ((r & 1) != 0) { 17 | r = (r >>> 1) ^ CRC32_POLY; 18 | } else { 19 | r >>>= 1; 20 | } 21 | } 22 | crcTable[i] = r; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/lz/Matches.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.lz; 2 | 3 | public final class Matches { 4 | public int count = 0; 5 | public final int[] dist; 6 | public final int[] len; 7 | 8 | Matches(int countMax) { 9 | this.len = new int[countMax]; 10 | this.dist = new int[countMax]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/lzma/Optimum.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.lzma; 2 | 3 | final class Optimum { 4 | private static final int INFINITY_PRICE = 1073741824; 5 | int backPrev; 6 | int backPrev2; 7 | boolean hasPrev2; 8 | int optPrev; 9 | int optPrev2; 10 | boolean prev1IsLiteral; 11 | int price; 12 | final int[] reps = new int[4]; 13 | final State state = new State(); 14 | 15 | Optimum() { 16 | } 17 | 18 | void reset() { 19 | this.price = INFINITY_PRICE; 20 | } 21 | 22 | void set1(int newPrice, int optCur, int back) { 23 | this.price = newPrice; 24 | this.optPrev = optCur; 25 | this.backPrev = back; 26 | this.prev1IsLiteral = false; 27 | } 28 | 29 | void set2(int newPrice, int optCur, int back) { 30 | this.price = newPrice; 31 | this.optPrev = optCur + 1; 32 | this.backPrev = back; 33 | this.prev1IsLiteral = true; 34 | this.hasPrev2 = false; 35 | } 36 | 37 | void set3(int newPrice, int optCur, int back2, int len2, int back) { 38 | this.price = newPrice; 39 | this.optPrev = (optCur + len2) + 1; 40 | this.backPrev = back; 41 | this.prev1IsLiteral = true; 42 | this.hasPrev2 = true; 43 | this.optPrev2 = optCur; 44 | this.backPrev2 = back2; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/package-info.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz; 2 | 3 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/rangecoder/RangeCoder.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.rangecoder; 2 | 3 | import java.util.Arrays; 4 | 5 | public abstract class RangeCoder { 6 | static final int BIT_MODEL_TOTAL = 2048; 7 | static final int BIT_MODEL_TOTAL_BITS = 11; 8 | static final int MOVE_BITS = 5; 9 | static final short PROB_INIT = (short) 1024; 10 | static final int SHIFT_BITS = 8; 11 | static final int TOP_MASK = -16777216; 12 | 13 | public static final void initProbs(short[] probs) { 14 | Arrays.fill(probs, PROB_INIT); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/rangecoder/RangeDecoderFromStream.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.rangecoder; 2 | 3 | import java.io.DataInputStream; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import org.tukaani.xz.CorruptedInputException; 7 | 8 | public final class RangeDecoderFromStream extends RangeDecoder { 9 | private final DataInputStream inData; 10 | 11 | public RangeDecoderFromStream(InputStream in) throws IOException { 12 | this.inData = new DataInputStream(in); 13 | if (this.inData.readUnsignedByte() != 0) { 14 | throw new CorruptedInputException(); 15 | } 16 | this.code = this.inData.readInt(); 17 | this.range = -1; 18 | } 19 | 20 | public boolean isFinished() { 21 | return this.code == 0; 22 | } 23 | 24 | public void normalize() throws IOException { 25 | if ((this.range & -16777216) == 0) { 26 | this.code = (this.code << 8) | this.inData.readUnsignedByte(); 27 | this.range <<= 8; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/simple/ARM.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.simple; 2 | 3 | public final class ARM implements SimpleFilter { 4 | private final boolean isEncoder; 5 | private int pos; 6 | 7 | public ARM(boolean isEncoder, int startPos) { 8 | this.isEncoder = isEncoder; 9 | this.pos = startPos + 8; 10 | } 11 | 12 | public int code(byte[] buf, int off, int len) { 13 | int end = (off + len) - 4; 14 | int i = off; 15 | while (i <= end) { 16 | if ((buf[i + 3] & 255) == 235) { 17 | int dest; 18 | int src = ((((buf[i + 2] & 255) << 16) | ((buf[i + 1] & 255) << 8)) | (buf[i] & 255)) << 2; 19 | if (this.isEncoder) { 20 | dest = src + ((this.pos + i) - off); 21 | } else { 22 | dest = src - ((this.pos + i) - off); 23 | } 24 | dest >>>= 2; 25 | buf[i + 2] = (byte) (dest >>> 16); 26 | buf[i + 1] = (byte) (dest >>> 8); 27 | buf[i] = (byte) dest; 28 | } 29 | i += 4; 30 | } 31 | i -= off; 32 | this.pos += i; 33 | return i; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/simple/ARMThumb.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.simple; 2 | 3 | public final class ARMThumb implements SimpleFilter { 4 | private final boolean isEncoder; 5 | private int pos; 6 | 7 | public ARMThumb(boolean isEncoder, int startPos) { 8 | this.isEncoder = isEncoder; 9 | this.pos = startPos + 4; 10 | } 11 | 12 | public int code(byte[] buf, int off, int len) { 13 | int end = (off + len) - 4; 14 | int i = off; 15 | while (i <= end) { 16 | if ((buf[i + 1] & 248) == 240 && (buf[i + 3] & 248) == 248) { 17 | int dest; 18 | int src = (((((buf[i + 1] & 7) << 19) | ((buf[i] & 255) << 11)) | ((buf[i + 3] & 7) << 8)) | (buf[i + 2] & 255)) << 1; 19 | if (this.isEncoder) { 20 | dest = src + ((this.pos + i) - off); 21 | } else { 22 | dest = src - ((this.pos + i) - off); 23 | } 24 | dest >>>= 1; 25 | buf[i + 1] = (byte) (((dest >>> 19) & 7) | 240); 26 | buf[i] = (byte) (dest >>> 11); 27 | buf[i + 3] = (byte) (((dest >>> 8) & 7) | 248); 28 | buf[i + 2] = (byte) dest; 29 | i += 2; 30 | } 31 | i += 2; 32 | } 33 | i -= off; 34 | this.pos += i; 35 | return i; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/simple/PowerPC.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.simple; 2 | 3 | public final class PowerPC implements SimpleFilter { 4 | private final boolean isEncoder; 5 | private int pos; 6 | 7 | public PowerPC(boolean isEncoder, int startPos) { 8 | this.isEncoder = isEncoder; 9 | this.pos = startPos; 10 | } 11 | 12 | public int code(byte[] buf, int off, int len) { 13 | int end = (off + len) - 4; 14 | int i = off; 15 | while (i <= end) { 16 | if ((buf[i] & 252) == 72 && (buf[i + 3] & 3) == 1) { 17 | int dest; 18 | int src = ((((buf[i] & 3) << 24) | ((buf[i + 1] & 255) << 16)) | ((buf[i + 2] & 255) << 8)) | (buf[i + 3] & 252); 19 | if (this.isEncoder) { 20 | dest = src + ((this.pos + i) - off); 21 | } else { 22 | dest = src - ((this.pos + i) - off); 23 | } 24 | buf[i] = (byte) (((dest >>> 24) & 3) | 72); 25 | buf[i + 1] = (byte) (dest >>> 16); 26 | buf[i + 2] = (byte) (dest >>> 8); 27 | buf[i + 3] = (byte) ((buf[i + 3] & 3) | dest); 28 | } 29 | i += 4; 30 | } 31 | i -= off; 32 | this.pos += i; 33 | return i; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /java/org/tukaani/xz/simple/SimpleFilter.java: -------------------------------------------------------------------------------- 1 | package org.tukaani.xz.simple; 2 | 3 | public interface SimpleFilter { 4 | int code(byte[] bArr, int i, int i2); 5 | } 6 | -------------------------------------------------------------------------------- /java/pxb/android/ResConst.java: -------------------------------------------------------------------------------- 1 | package pxb.android; 2 | 3 | public interface ResConst { 4 | public static final int RES_STRING_POOL_TYPE = 1; 5 | public static final int RES_TABLE_PACKAGE_TYPE = 512; 6 | public static final int RES_TABLE_TYPE = 2; 7 | public static final int RES_TABLE_TYPE_SPEC_TYPE = 514; 8 | public static final int RES_TABLE_TYPE_TYPE = 513; 9 | public static final int RES_XML_CDATA_TYPE = 260; 10 | public static final int RES_XML_END_ELEMENT_TYPE = 259; 11 | public static final int RES_XML_END_NAMESPACE_TYPE = 257; 12 | public static final int RES_XML_RESOURCE_MAP_TYPE = 384; 13 | public static final int RES_XML_START_ELEMENT_TYPE = 258; 14 | public static final int RES_XML_START_NAMESPACE_TYPE = 256; 15 | public static final int RES_XML_TYPE = 3; 16 | } 17 | -------------------------------------------------------------------------------- /java/pxb/android/StringItem.java: -------------------------------------------------------------------------------- 1 | package pxb.android; 2 | 3 | public class StringItem { 4 | public String data; 5 | public int dataOffset; 6 | public int index; 7 | 8 | public StringItem(String data) { 9 | this.data = data; 10 | } 11 | 12 | public boolean equals(Object obj) { 13 | if (this == obj) { 14 | return true; 15 | } 16 | if (obj == null) { 17 | return false; 18 | } 19 | if (getClass() != obj.getClass()) { 20 | return false; 21 | } 22 | StringItem other = (StringItem) obj; 23 | if (this.data == null) { 24 | if (other.data != null) { 25 | return false; 26 | } 27 | return true; 28 | } else if (this.data.equals(other.data)) { 29 | return true; 30 | } else { 31 | return false; 32 | } 33 | } 34 | 35 | public int hashCode() { 36 | return (this.data == null ? 0 : this.data.hashCode()) + 31; 37 | } 38 | 39 | public String toString() { 40 | return String.format("S%04d %s", new Object[]{Integer.valueOf(this.index), this.data}); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /java/pxb/android/arsc/Config.java: -------------------------------------------------------------------------------- 1 | package pxb.android.arsc; 2 | 3 | import java.util.Map; 4 | import java.util.TreeMap; 5 | 6 | public class Config { 7 | public final int entryCount; 8 | public final byte[] id; 9 | public Map resources = new TreeMap(); 10 | int wChunkSize; 11 | int wEntryStart; 12 | int wPosition; 13 | 14 | public Config(byte[] id, int entryCount) { 15 | this.id = id; 16 | this.entryCount = entryCount; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/pxb/android/arsc/Pkg.java: -------------------------------------------------------------------------------- 1 | package pxb.android.arsc; 2 | 3 | import java.util.TreeMap; 4 | 5 | public class Pkg { 6 | public final int id; 7 | public String name; 8 | public TreeMap types = new TreeMap(); 9 | 10 | public Pkg(int id, String name) { 11 | this.id = id; 12 | this.name = name; 13 | } 14 | 15 | public Type getType(int tid, String name, int entrySize) { 16 | Type type = (Type) this.types.get(Integer.valueOf(tid)); 17 | if (type == null) { 18 | type = new Type(); 19 | type.id = tid; 20 | type.name = name; 21 | type.specs = new ResSpec[entrySize]; 22 | this.types.put(Integer.valueOf(tid), type); 23 | return type; 24 | } else if (name == null) { 25 | return type; 26 | } else { 27 | if (type.name == null) { 28 | type.name = name; 29 | } else if (!name.endsWith(type.name)) { 30 | throw new RuntimeException(); 31 | } 32 | if (type.specs.length == entrySize) { 33 | return type; 34 | } 35 | throw new RuntimeException(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /java/pxb/android/arsc/ResEntry.java: -------------------------------------------------------------------------------- 1 | package pxb.android.arsc; 2 | 3 | public class ResEntry { 4 | public final int flag; 5 | public final ResSpec spec; 6 | public Object value; 7 | int wOffset; 8 | 9 | public ResEntry(int flag, ResSpec spec) { 10 | this.flag = flag; 11 | this.spec = spec; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/pxb/android/arsc/ResSpec.java: -------------------------------------------------------------------------------- 1 | package pxb.android.arsc; 2 | 3 | public class ResSpec { 4 | public int flags; 5 | public final int id; 6 | public String name; 7 | 8 | public ResSpec(int id) { 9 | this.id = id; 10 | } 11 | 12 | public void updateName(String s) { 13 | String name = this.name; 14 | if (name == null) { 15 | this.name = s; 16 | } else if (!s.equals(name)) { 17 | throw new RuntimeException(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/pxb/android/arsc/Type.java: -------------------------------------------------------------------------------- 1 | package pxb.android.arsc; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Type { 7 | public List configs = new ArrayList(); 8 | public int id; 9 | public String name; 10 | public ResSpec[] specs; 11 | int wPosition; 12 | 13 | public void addConfig(Config config) { 14 | if (config.entryCount != this.specs.length) { 15 | throw new RuntimeException(); 16 | } 17 | this.configs.add(config); 18 | } 19 | 20 | public ResSpec getSpec(int resId) { 21 | ResSpec res = this.specs[resId]; 22 | if (res != null) { 23 | return res; 24 | } 25 | res = new ResSpec(resId); 26 | this.specs[resId] = res; 27 | return res; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /java/pxb/android/arsc/Value.java: -------------------------------------------------------------------------------- 1 | package pxb.android.arsc; 2 | 3 | public class Value { 4 | public final int data; 5 | public String raw; 6 | public final int type; 7 | 8 | public Value(int type, int data, String raw) { 9 | this.type = type; 10 | this.data = data; 11 | this.raw = raw; 12 | } 13 | 14 | public String toString() { 15 | if (this.type == 3) { 16 | return this.raw; 17 | } 18 | return String.format("{t=0x%02x d=0x%08x}", new Object[]{Integer.valueOf(this.type), Integer.valueOf(this.data)}); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/pxb/android/axml/AxmlVisitor.java: -------------------------------------------------------------------------------- 1 | package pxb.android.axml; 2 | 3 | public class AxmlVisitor extends NodeVisitor { 4 | public AxmlVisitor(NodeVisitor av) { 5 | super(av); 6 | } 7 | 8 | public void ns(String prefix, String uri, int ln) { 9 | if (this.nv != null && (this.nv instanceof AxmlVisitor)) { 10 | ((AxmlVisitor) this.nv).ns(prefix, uri, ln); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/pxb/android/axml/NodeVisitor.java: -------------------------------------------------------------------------------- 1 | package pxb.android.axml; 2 | 3 | public abstract class NodeVisitor { 4 | public static final int TYPE_FIRST_INT = 16; 5 | public static final int TYPE_INT_BOOLEAN = 18; 6 | public static final int TYPE_INT_HEX = 17; 7 | public static final int TYPE_REFERENCE = 1; 8 | public static final int TYPE_STRING = 3; 9 | protected NodeVisitor nv; 10 | 11 | public NodeVisitor(NodeVisitor nv) { 12 | this.nv = nv; 13 | } 14 | 15 | public void attr(String ns, String name, int resourceId, int type, Object obj) { 16 | if (this.nv != null) { 17 | this.nv.attr(ns, name, resourceId, type, obj); 18 | } 19 | } 20 | 21 | public NodeVisitor child(String ns, String name) { 22 | if (this.nv != null) { 23 | return this.nv.child(ns, name); 24 | } 25 | return null; 26 | } 27 | 28 | public void end() { 29 | if (this.nv != null) { 30 | this.nv.end(); 31 | } 32 | } 33 | 34 | public void line(int ln) { 35 | if (this.nv != null) { 36 | this.nv.line(ln); 37 | } 38 | } 39 | 40 | public void text(int lineNumber, String value) { 41 | if (this.nv != null) { 42 | this.nv.text(lineNumber, value); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /java/pxb/android/axml/ValueWrapper.java: -------------------------------------------------------------------------------- 1 | package pxb.android.axml; 2 | 3 | public class ValueWrapper { 4 | public static final int CLASS = 3; 5 | public static final int ID = 1; 6 | public static final int STYLE = 2; 7 | public final String raw; 8 | public final int ref; 9 | public final int type; 10 | 11 | private ValueWrapper(int type, int ref, String raw) { 12 | this.type = type; 13 | this.raw = raw; 14 | this.ref = ref; 15 | } 16 | 17 | public ValueWrapper replaceRaw(String raw) { 18 | return new ValueWrapper(this.type, this.ref, raw); 19 | } 20 | 21 | public static ValueWrapper wrapId(int ref, String raw) { 22 | return new ValueWrapper(ID, ref, raw); 23 | } 24 | 25 | public static ValueWrapper wrapStyle(int ref, String raw) { 26 | return new ValueWrapper(STYLE, ref, raw); 27 | } 28 | 29 | public static ValueWrapper wrapClass(int ref, String raw) { 30 | return new ValueWrapper(CLASS, ref, raw); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /java/pxb/android/axmlLP/EmptyAdapter.java: -------------------------------------------------------------------------------- 1 | package pxb.android.axmlLP; 2 | 3 | import pxb.android.axmlLP.AxmlVisitor.NodeVisitor; 4 | 5 | public class EmptyAdapter extends AxmlVisitor { 6 | 7 | public static class EmptyNode extends NodeVisitor { 8 | public NodeVisitor child(String ns, String name) { 9 | return new EmptyNode(); 10 | } 11 | } 12 | 13 | public NodeVisitor first(String ns, String name) { 14 | return new EmptyNode(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /java/pxb/android/axmlLP/StringItem.java: -------------------------------------------------------------------------------- 1 | package pxb.android.axmlLP; 2 | 3 | class StringItem { 4 | public String data; 5 | public int dataOffset; 6 | public int index; 7 | 8 | public StringItem(String data) { 9 | this.data = data; 10 | } 11 | 12 | public boolean equals(Object obj) { 13 | return ((StringItem) obj).data.equals(this.data); 14 | } 15 | 16 | public int hashCode() { 17 | return this.data.hashCode(); 18 | } 19 | 20 | public String toString() { 21 | return String.format("S%04d %s", new Object[]{Integer.valueOf(this.index), this.data}); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/android.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/auto.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/button_binder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/button_binder_focus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/button_binder_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/button_clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/button_clear.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/button_clear_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/button_clear_press.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/cbutton.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/checkbox_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/checkbox_selector_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/clear.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_ads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_ads.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_backup.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_backup_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_backup_data.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_create_apk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_create_apk.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_custom_patch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_custom_patch.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_deodex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_deodex.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_lvl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_lvl.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_odex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_odex.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_patch_reboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_patch_reboot.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_patcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_patcher.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_permissions.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_recycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_recycle.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_restore.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/context_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/context_share.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/faq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/faq.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/fb_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/fb_back.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/fb_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/fb_folder.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/file_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/file_icon.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_angel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_angel.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_bolen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_bolen.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_notify.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_progress_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_progress_indicator.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_vopros.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_vopros.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/ic_wait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/ic_wait.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/info_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/info_app.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/klev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/klev.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/klev_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/klev_down.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/menu.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/menu_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/menu_back.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/move_to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/move_to.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/rect_text_edit_transparent.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/remove.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/rounded_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/run.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/settings.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/star.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/star_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/star_down.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/switch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/switch_off.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/switch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/switch_on.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/tab_bg_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/tab_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/tab_bg_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/tab_divider.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/tab_divider.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/tab_text_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/toggleswitch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-hdpi-v4/update.png -------------------------------------------------------------------------------- /res/drawable-hdpi-v4/widget_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/button_binder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/button_binder_focus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/button_binder_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/cbutton.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-ldpi-v4/ic_notify.png -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/rounded_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/tab_bg_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/tab_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/tab_bg_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/tab_text_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/toggleswitch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-ldpi-v4/widget_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/button_binder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/button_binder_focus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/button_binder_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/cbutton.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-mdpi-v4/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-mdpi-v4/ic_notify.png -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/ic_progress_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-mdpi-v4/ic_progress_indicator.png -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/rounded_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/tab_bg_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/tab_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/tab_bg_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/tab_text_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/toggleswitch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-mdpi-v4/widget_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable-xhdpi-v4/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-xhdpi-v4/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xhdpi-v4/ic_progress_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-xhdpi-v4/ic_progress_indicator.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi-v4/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-xxhdpi-v4/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi-v4/ic_progress_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-xxhdpi-v4/ic_progress_indicator.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi-v4/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAppz/LuckyPatcher/e343fe0ad53b7fc9a3bb03b9c2df98c0f9711205/res/drawable-xxxhdpi-v4/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable/background_alert.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /res/drawable/background_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/button_advanced.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/button_advanced_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/button_binder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/button_binder_focus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/button_binder_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/cbutton.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/cbutton_adv.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/cbutton_clear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/custom_progress_bar_horizontal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /res/drawable/my_progress_indeterminate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /res/drawable/rect_text_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable/rounded_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/tab_bg_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/tab_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable/tab_bg_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/tab_text_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable/toggleswitch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/widget_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /res/layout/android_patch_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/layout/app_disabler_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/layout/binder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |